JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用
生活随笔
收集整理的這篇文章主要介紹了
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>?
轉載于:https://www.cnblogs.com/yzssoft/p/6970478.html
總結
以上是生活随笔為你收集整理的JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c 链表之 快慢指针 查找循环节点(转)
- 下一篇: MethodBase.GetCurren