文档章节

在FreeMarker中使用JFinal插件shiro的方法

chenhai_bj
 chenhai_bj
发布于 2014/04/05 17:02
字数 311
阅读 1942
收藏 16


  直接上代码: 

  hasRole方法的实现类:

public class HasRoleFreeMarkerMethod implements TemplateMethodModel{

	@SuppressWarnings("rawtypes")
	@Override
	public Object exec(List list) throws TemplateModelException {
		if(null == list || 1 != list.size()){
			throw new TemplateModelException("Wrong arguments: only one argument is allowed");
		}
		
		String roleName = (String) list.get(0);
		return getSubject() != null && roleName != null
				&& roleName.length() > 0 && getSubject().hasRole(roleName);
	}

	private static Subject getSubject() {
		return SecurityUtils.getSubject();
	}

}

  hasAnyRoles方法的实现类:

public class HasAnyRolesFreeMarkerMethod implements TemplateMethodModel{

	@SuppressWarnings("rawtypes")
	@Override
	public Object exec(List list) throws TemplateModelException {
		//参数不合法直接返回false
		if(null == list || list.isEmpty()){
			return false;
		}
		// 循环判断当前用用户是否拥有其中的某一个角色
		boolean hasAny = false;
		for(Object obj : list){
			System.out.println(obj);
			if(getSubject().hasRole((String)obj)){
				hasAny = true;
				break;
			}
		}
		return hasAny;
	}

	private static Subject getSubject() {
		return SecurityUtils.getSubject();
	}

}

  剩余方法的实现方式与上面一样,在这省略......

  然后写一个全局Interceptor: ShiroFreeMarkerInterceptor

public class ShiroFreeMarkerInterceptor implements Interceptor {

	public void intercept(ActionInvocation ai) {
		Controller c = ai.getController();
		c.setAttr("hasRole", new HasRoleFreeMarkerMethod());
		c.setAttr("hasAnyRoles", new HasAnyRolesFreeMarkerMethod());
		c.setAttr("hasPermission", new HasPermissionFreeMarkerMethod());
		c.setAttr("isAuthenticated", new AuthenticatedFreeMarkerMethod());
		// 执行正常逻辑
		ai.invoke();
	}
}

  在JFinal中配置拦截器:

public void configInterceptor(Interceptors me) {
		me.add(new ShiroInterceptor());
		me.add(new ShiroFreeMarkerInterceptor());
	}

   页面中使用方式:

<#if hasAnyRoles("admin","user")>
    <input type="button" value="查看"/>
</#if>
<#if hasRole("admin")>
    <input type="button" value="编辑"/>
</#if>


© 著作权归作者所有

共有 人打赏支持
chenhai_bj
粉丝 6
博文 4
码字总数 1609
作品 0
海淀
私信 提问
加载中

评论(3)

zcqshine
zcqshine
这个插件跟jfinal2.0好像不兼容了
chenhai_bj
chenhai_bj

引用来自“JFinal”的评论

非常简洁,感谢分享,如果 HasRoleFreeMarkerMethod 这些类是无状态的,可以不用每次都 new 出来,可以作为拦截器中的属性存在,提升点性能,顶一个 79

确实有道理,而且也不一定加为全局的拦截器,只需在页面上需要这些标签的controller上添加即可。

JFinal
JFinal
非常简洁,感谢分享,如果 HasRoleFreeMarkerMethod 这些类是无状态的,可以不用每次都 new 出来,可以作为拦截器中的属性存在,提升点性能,顶一个 79
JFinal+Shiro能否再简便些?

@JFinal 你好,想跟你请教个问题: 最近关注Shiro,感觉它的身份、权限的认证很不错。 找到JFinal的shiroplugin,不过感觉还是有那么一点复杂,请使用过此插件的同学都分享下感受呢~ ///////...

车开源
2014/04/03
3.7K
4
在非controller中应该如使用CaptchaRender?

@JFinal 你好,想跟你请教个问题:项目使用JFINAL 集成shiro,验证码使用了CaptchaRender获取,但是在shiro的shirodbrealm中无法使用CaptchaRender validate方法验证。像这种情况,在非contr...

shooter118
2013/07/06
302
2
使用Freesql简单地实现多条件查询

在实际应用中我们经常会遇到多条件查询的情景,以往的解决方案是在java中对各个参数值进行非空之类的判断,再进行sql及参数的拼凑。 其实还有更简单的解决方法的--用Freemarker。Freemarker可...

jse7en
2014/03/23
0
4
jfinal 如何指定freemarker根路径呢?

@JFinal 你好,想跟你请教个问题: jfinal 如何指定freemarker根路径呢? 前几天学习beetl,其中beetl.properties配置文件可以配置模块文件的根路径,例如: RESOURCE.root=/pages 这几天学习...

jelly_oy
2014/12/18
730
2
关于JFinal 中Freemarker 使用Import 标签疑问

@jfinal 我现在有个项目页面以前用到freemarker 然后我移植到Jfinl框架中,Freemarker中解析有Import标签页面出错。这应该非Jfinal问题,我怀疑Jfinal引入Freemarker时应该需要设置参数,貌似...

郭恩洲_OSC博客
2014/08/28
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

c++ 定义新的异常

#include <iostream> #include <exception> using namespace std; struct MyException : public exception { const char * what () const throw () { return "C++ Exception"; } }; int main......

天王盖地虎626
23分钟前
0
0
PDMan-2.1.1 发布:用心开源,免费的国产数据库建模工具(春节前最后一个版本)

一、软件介绍 PDMan 是一款开源免费的数据库模型建模工具,是PowerDesigner之外另一种更好的选择。支持Windows,Mac,Linux等操作系统,具有上手容易,使用简单的特点。 2018年获得码云GVP (Gi...

O龙猫O
47分钟前
10
0
OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
今天
67
5
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
8
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部