文档章节

beetl 和 shrio 结合

闲大赋
 闲大赋
发布于 2013/07/08 11:10
字数 498
阅读 6403
收藏 35
点赞 10
评论 4

shrio 提供有jsp 标签,供在jsp 里使用,如果想在beetl中使用,有俩种方法,

一是beetl支持集成jsp页面,所以你可以在在jsp里使用shrio标签

另外,beetl 使用自定义函数写了shiro tag功能,你可以像使用shiro标签那样使用shiro

package com.ext;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.Map;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.bee.tl.core.GroupTemplate;

/*gt.registerFunctionPackage("so",new ShiroExt ());

你可以在模板里直接调用,譬如
@if(so.isGuest()) {


*/
public class ShiroExt {
	/**
	 * The guest tag
	 * 
	 * @return
	 */
	public boolean isGuest() {
		return getSubject() == null || getSubject().getPrincipal() == null;
	}

	/**
	 * The user tag
	 * 
	 * @return
	 */
	public boolean isUser() {
		return getSubject() != null && getSubject().getPrincipal() != null;
	}

	/**
	 * The authenticated tag
	 * 
	 * @return
	 */
	public boolean isAuthenticated() {
		return getSubject() != null && getSubject().isAuthenticated();
	}

	public boolean isNotAuthenticated() {
		return !isAuthenticated();
	}

	/**
	 * The principal tag
	 * 
	 * @param map
	 * @return
	 */
	public String principal(Map map) {
		String strValue = null;
		if (getSubject() != null) {

			// Get the principal to print out
			Object principal;
			String type = map != null ? (String) map.get("type") : null;
			if (type == null) {
				principal = getSubject().getPrincipal();
			} else {
				principal = getPrincipalFromClassName(type);
			}
			String property = map != null ? (String) map.get("property") : null;
			// Get the string value of the principal
			if (principal != null) {
				if (property == null) {
					strValue = principal.toString();
				} else {
					strValue = getPrincipalProperty(principal, property);
				}
			}

		}

		if (strValue != null) {
			return strValue;
		} else {
			return null;
		}
	}

	/**
	 * The hasRole tag
	 * 
	 * @param roleName
	 * @return
	 */
	public boolean hasRole(String roleName) {
		return getSubject() != null && getSubject().hasRole(roleName);
	}

	/**
	 * The lacksRole tag
	 * 
	 * @param roleName
	 * @return
	 */
	public boolean lacksRole(String roleName) {
		boolean hasRole = getSubject() != null
				&& getSubject().hasRole(roleName);
		return !hasRole;
	}

	/**
	 * The hasAnyRole tag
	 * 
	 * @param roleNames
	 * @return
	 */
	public boolean hasAnyRole(String roleNames) {
		boolean hasAnyRole = false;

		Subject subject = getSubject();

		if (subject != null) {

			// Iterate through roles and check to see if the user has one of the
			// roles
			for (String role : roleNames.split(",")) {

				if (subject.hasRole(role.trim())) {
					hasAnyRole = true;
					break;
				}

			}

		}

		return hasAnyRole;
	}

	/**
	 * The hasPermission tag
	 * 
	 * @param p
	 * @return
	 */
	public boolean hasPermission(String p) {
		return getSubject() != null && getSubject().isPermitted(p);
	}

	/**
	 * The lacksPermission tag
	 * 
	 * @param p
	 * @return
	 */
	public boolean lacksPermission(String p) {
		return !hasPermission(p);
	}

	@SuppressWarnings({ "unchecked" })
	private Object getPrincipalFromClassName(String type) {
		Object principal = null;

		try {
			Class cls = Class.forName(type);
			principal = getSubject().getPrincipals().oneByType(cls);
		} catch (ClassNotFoundException e) {

		}
		return principal;
	}

	private String getPrincipalProperty(Object principal, String property) {
		String strValue = null;

		try {
			BeanInfo bi = Introspector.getBeanInfo(principal.getClass());

			// Loop through the properties to get the string value of the
			// specified property
			boolean foundProperty = false;
			for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {
				if (pd.getName().equals(property)) {
					Object value = pd.getReadMethod().invoke(principal,
							(Object[]) null);
					strValue = String.valueOf(value);
					foundProperty = true;
					break;
				}
			}

			if (!foundProperty) {
				final String message = "Property [" + property
						+ "] not found in principal of type ["
						+ principal.getClass().getName() + "]";

				throw new RuntimeException(message);
			}

		} catch (Exception e) {
			final String message = "Error reading property [" + property
					+ "] from principal of type ["
					+ principal.getClass().getName() + "]";

			throw new RuntimeException(message, e);
		}

		return strValue;
	}

	protected Subject getSubject() {
		return SecurityUtils.getSubject();
	}

	public static void main(String[] args) {
		GroupTemplate gt = new GroupTemplate();
		gt.registerFunctionPackage("shiro", new ShiroExt());

	}

}
 

© 著作权归作者所有

共有 人打赏支持
闲大赋

闲大赋

粉丝 1097
博文 86
码字总数 81146
作品 10
西城
架构师
加载中

评论(4)

小代码2016
小代码2016
springmvc beetl shiro 怎么做啊?要在哪里写配置啊?
水牛程序猿
水牛程序猿
有没有springmvc beetl shiro 的示例呀?
xiaoqqq
xiaoqqq
29非常好!
Java_weber
Java_weber
就是缺这个
JFinal权限控制后台--JFinal Authority

JFinal Authority 是 JFinal 权限控制后台 Jfinal后台 权限界面参考 @SyPro 采用 @JFinal @Jfinal-Ext @Shrio @EhCache @FastJSON @Gson @Easyui @Bootstrap @Beetl @Druid @EChat @HightCh......

12叔 ⋅ 2014/03/31 ⋅ 7

模板引擎Beet的6大创新点

2011年发布Beetl 0.5的时候,新闻是在Iteye上发布的,老资格程序员可能预料Iteye上会发生什么了,我收到的最多的不是鼓励和喝彩,而是吐槽,”又是一个轮子“是里面最大的声音。尽管4年前的版...

闲大赋 ⋅ 2015/08/02 ⋅ 18

如梦技术/JFinal-assets

说明 JFinal框架结合JFinal3.0 template、jsp、beetl、freemarker模版的js、css在线合并压缩插件! 结合CDN使用效果更佳哦~ 依赖 JFinal yuicompressor commons-io 使用 ###JFinal3.0 templ...

如梦技术 ⋅ 2015/11/06 ⋅ 0

Beetl 2.2.4 发布,java模板引擎

Beetl 2.2.4 发布,更新内容如下: 新增功能: #175:jodd3.3 MVC最新版本支持 #170:struts2 增加contentType配置 Bug修复: #178: 精度计算除法可能抛错bug修复 #177: 忽略客户端IO错误 #176...

闲大赋 ⋅ 2015/07/20 ⋅ 19

Beetl 2.2.1 发布,Java 模板引擎

新增功能: #140:添加parseLong函数。 #138:增强debug函数,如debug();debug(1,a,....) #136: web集成增强,非必要不创建Session #132: select-case 允许表达式。如case @User.Man 137 本地调...

闲大赋 ⋅ 2015/04/06 ⋅ 7

Beetl 2.2.3 发布, java 模板引擎

Beetl 2.2.3 发布 新增功能: #163:增加一个用于Web的异常显示WebErrorHandler #162:非ajax页面使用ajax锚点,给出详细提示信息 #161:parseInt等函数输入参数如果为null,给出明确提示。 #159...

闲大赋 ⋅ 2015/06/09 ⋅ 18

Beetl 2.2.2 发布, java 模板引擎

Beetl 2.2.2 发布了,改进内容包括: 新增功能: #147:自定义html标签属性表达式增强。如 #146: ClasspathResourceLoader,增加ClassLoader作为构造函数参数. 136:修复创建session导致web服务...

闲大赋 ⋅ 2015/05/05 ⋅ 16

shrio 会话 和 web会话 有什么区别?

是一样的吗?我查了一下好像不同的,那不同的话shrio怎么知道是同一个人的会话呢?还有和web集成的时候岂不是有多个会话(shrio的和web的)

554330833a ⋅ 2016/10/17 ⋅ 5

关于beetl认识的几个误区

beetl 现在国内越来越流行,社区网站每日访问量都有上千,下载量每日保持在20个左右(无法统计maven的)。qq群在满员之前已经踢走了一拨又一拨的不活跃会员还有少量价值观不符合的人(写这个...

闲大赋 ⋅ 2016/09/14 ⋅ 17

内容管理系统--CMS 网站

功能 1.cms 网站 2.系统权限 3.微信公众号管理 使用技术 spring4 + shrio + ehcache + mybatis + MYSQL + H-ui.admin + Amaze UI 使用 maven 项目管理 ,一键发布项目war. 同时maven 结合 an...

xzjie ⋅ 2016/11/02 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HiSDP —— 高效的C++软件开发平台

目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的。 缘由 当决定采用C++编程语言去开发一个软件时,紧接着所面临...

阿里云云栖社区 ⋅ 28分钟前 ⋅ 0

zookeeper-3.4.12 下载与安装教程

一、zookeeper下载地址 http://mirrors.hust.edu.cn/apache/zookeeper/ 二、启动教程 把压缩包放在指定目录下 第三: 进入 conf文件夹底下 zoo_sample.cfg 文件名改成 zoo.cfg 第四步: 进入b...

泉天下 ⋅ 29分钟前 ⋅ 0

Oracle 中文日期转换

SELECT TO_date('2011年11月11日', 'yy"年"mm"月"dd"日"') FROM DUAL; 1. Oracle无法识别中文格式,所以添加双引号。 2. 后面的格式是指字符串在转换前的格式,而不是指转换后的格式。...

江戸川 ⋅ 30分钟前 ⋅ 0

MySell:API Spring Boot

起步 类目 商品 订单

BeanHo ⋅ 33分钟前 ⋅ 0

Spring方法拦截器MethodInterceptor

参考资料 1、Spring方法拦截器MethodInterceptor 2、Sharding JDBC源码分析-JdbcMethodInvocation类的作用

哎小艾 ⋅ 36分钟前 ⋅ 0

正则表达式

元字符 元字符,又叫字符集,就是用一些特殊符号表示特定种类的字符或位置。 匹配字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 匹配...

wangchen1999 ⋅ 36分钟前 ⋅ 0

数据库数据导入Elasticsearch案例分享

基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本) 1.案例对应的源码 https://gitee.com/bboss/bboss-elastic/blob/master/bboss-el...

bboss ⋅ 37分钟前 ⋅ 0

动手---sbt(2)

参考 https://blog.csdn.net/leishangwen/article/details/46225587 建立一个chisel_max目录,文件内容如后面所述,现在开始执行命令: joe@joe-Aspire-Z3730:/media/sdb4/download/scala$ c......

whoisliang ⋅ 43分钟前 ⋅ 0

纯js实现最简单的文件上传(后台使用MultipartFile)

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件</title> <script type="text/javascript"> //图片上传 var xhr......

孟飞阳 ⋅ 48分钟前 ⋅ 0

iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码

iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码、FMDB、键盘动态高度、定位等 动画...

sunnyaigd ⋅ 49分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部