博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在FreeMarker中使用JFinal插件shiro的方法
阅读量:6094 次
发布时间:2019-06-20

本文共 1873 字,大约阅读时间需要 6 分钟。

hot3.png

  直接上代码: 

  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")>    
<#if hasRole("admin")>    

转载于:https://my.oschina.net/u/1387193/blog/219386

你可能感兴趣的文章
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>
鼠标增强软件StrokeIt使用方法
查看>>
本地连接linux虚拟机的方法
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
CentOS6.4关闭触控板
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>