1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用

JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用

时间:2024-05-08 18:08:29

相关推荐

JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用

实现在FreeMarker模板中控制对应按钮的显示隐藏主要用到了Shiro中的hasRole, hasAnyRoles, hasPermission以及Authenticated等方法,我们可以实现TemplateMethodModelEx类的相关操作,然后通过全局拦截器将对应的方法注入到视图模板中,就可以直接在ftl模板中使用自定义的方法进行判断了,具体代码如下:

第一步实现HasPermissionFreeMarkerMethod

public class HasPermissionFreeMarkerMethod implements TemplateMethodModelEx {@Overridepublic Object exec(List list) throws TemplateModelException {if (null == list || 1 != list.size()) {throw new TemplateModelException("Wrong arguments: only one argument is allowed");}Object permissionName = list.get(0);return getSubject() != null && permissionName != null&& getSubject().isPermitted(permissionName.toString());}private static Subject getSubject() {return SecurityUtils.getSubject();}}

第二步定义一个全局的拦截器

public class ShiroFreeMarkerInterceptor implements Interceptor {@Overridepublic void intercept(Invocation 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();}}

第三步在AppConfig中配置全局拦截器

/*** 配置全局拦截器*/public void configInterceptor(Interceptors me) {me.add(new ShiroInterceptor());me.add(new AuthInterceptor());me.add(new ShiroFreeMarkerInterceptor());//添加在FreeMarker视图中使用Shiro的拦截器}

现在我们就可以在视图中直接来根据权限标识控制按钮的显示与隐藏了

<#if hasPermission("Trade:新增")><a class="btn_color_1" onclick="onEdit(0)"><i class="fa fa-plus"></i> 新增</a></#if><#if hasPermission("Trade:编辑")><a class="btn_color_2" onclick="onEdit()"><i class="fa fa-edit"></i> 编辑</a></#if><#if hasPermission("Trade:删除")><a class="btn_color_3" onclick="onDelete()"><i class="fa fa-remove"></i> 删除</a></#if><#if hasPermission("Trade:重新统计")><a class="btn_color_2" onclick="onTongJi()"><i class="fa fa-bolt"></i> 重新统计</a></#if>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。