日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模板引擎中控制到按钮粒度的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。