自定義(補充)shiro標籤
shiro提供了jsp標籤用於頁面上的許可權控制,有hasAnyRoles,hasPermission等標籤,但是卻沒提供hasAnyPermission標籤,有點不大方便。
這時候我們完全可以仿照shiro的原始碼,進行照貓畫虎,擴充一下。
shiro的標籤定義檔案在shiro-all.jar下的META-INF目錄下的shiro.tld中,開啟檔案後我們可以看到如下標籤的定義:
該檔案中定義了每個標籤的名字和相應的標籤的實現類。我們要補充一個hasAnyPermission的標籤,該標籤的邏輯和hasAnyRoles有些類似。我們先開啟hasAnyRoles的實現類看看,然後照貓畫虎做一個hasAnyPermission的標籤。<taglib> <tlib-version>1.1.2</tlib-version> <jsp-version>1.2</jsp-version> <short-name>Apache Shiro</short-name> <uri>http://shiro.apache.org/tags</uri> <description>Apache Shiro JSP Tag Library.</description> <tag> <name>hasPermission</name> <tag-class>org.apache.shiro.web.tags.HasPermissionTag</tag-class> <body-content>JSP</body-content> <description>Displays body content only if the current Subject (user) 'has' (implies) the specified permission (i.e the user has the specified ability). </description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>hasAnyRoles</name> <tag-class>org.apache.shiro.web.tags.HasAnyRolesTag</tag-class> <body-content>JSP</body-content> <description>Displays body content only if the current user has one of the specified roles from a comma-separated list of role names. </description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
package org.apache.shiro.web.tags; import org.apache.shiro.subject.Subject; public class HasAnyRolesTag extends RoleTag { private static final String ROLE_NAMES_DELIMETER = ","; public HasAnyRolesTag() { } protected boolean showTagBody(String roleNames) { boolean hasAnyRole = false; Subject subject = getSubject(); if (subject != null) { for (String role : roleNames.split(ROLE_NAMES_DELIMETER)) { if (subject.hasRole(role.trim())) { hasAnyRole = true; break; } } } return hasAnyRole; } }
以上是hasAnyRolesTag的實現類,我們仿照這個實現hasAnyPermission:
將該原始碼編譯成class位元組碼檔案,扔進jar包的\org\apache\shiro\web\tags目錄下package org.apache.shiro.web.tags; import org.apache.shiro.subject.Subject; public class HasAnyPermissionTag extends PermissionTag { private static final long serialVersionUID = 1L; private static final String PERMISSION_NAMES_DELIMETER = ","; public HasAnyPermissionTag() { } @Override protected boolean showTagBody(String permissions) { boolean hasAnyPermission = false; Subject subject = getSubject(); if (subject != null) { for (String permission : permissions .split(PERMISSION_NAMES_DELIMETER)) { if (subject.isPermitted(permission.trim())) { hasAnyPermission = true; break; } } } return hasAnyPermission; } }
並在jar包裡的shiro.tld檔案中加入以下程式碼指定標籤:
<tag>
<name>hasAnyPermission</name>
<tag-class>org.apache.shiro.web.tags.HasAnyPermissionTag</tag-class>
<body-content>JSP</body-content>
<description>Displays body content only if the current Subject (user)
'has' (implies) one of the specified permission (i.e the user has the specified ability) form a list of permissions.
</description>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
OK,搞定,到頁面上測試一下:
<shiro:hasAnyPermission name="sys_config:policy,
sys_config:server,
sys_config:logdown,
sys_config:keyword,
sys_config:audit,
sys_config:sysinfo">
<li id="4"><a href="javascript:changeMainMenu(4)"><i class="tables"></i>系統配置</a></li>
</shiro:hasAnyPermission>
表示如果當前使用者擁有以下許可權的任何一個許可權,那麼該選單就會顯示,好的,可以了。
收工。
相關推薦
自定義(補充)shiro標籤
shiro提供了jsp標籤用於頁面上的許可權控制,有hasAnyRoles,hasPermission等標籤,但是卻沒提供hasAnyPermission標籤,有點不大方便。 這時候我們完全可以仿照shiro的原始碼,進行照貓畫虎,擴充一下。 shiro的標籤定義檔案在sh
Apache Shiro(四)——Shiro 標籤與許可權註解
一、Shiro 標籤 Shiro 提供了 JSTL 標籤用於在 JSP 頁面進行許可權控制,如根據登入使用者顯示相應的頁面按鈕。 guest 標籤:使用者沒有身份驗證時顯示相應資訊,即遊客訪問資訊。 user 標籤:使用者已經經過認證/記住我登入後顯示相應的資訊。 authe
百度地圖的覆蓋物自定義(二)--資訊視窗的自定義(呼叫白茹提供的資訊視窗InfoWindow)
百度地圖的覆蓋物自定義(而)--資訊視窗的自定義(呼叫白茹提供的資訊視窗InfoWindow) var point=new BMap.Point(111.54525,45.578); setInfo
Docker映象的修改和自定義(五)
一、docker映象的更新 (1)啟動映象,寫入一些檔案或者更新軟體 docker run -it 3afd47092a0e [[email protected] /]# ls (2)更新映象 docker commit -m="test update" -a="
Android自定義xml屬性,自定義(組合)控制元件
原文連結 本文是在“劍蕭舞蝶”的“Android中View自定義組合控制元件的基本編寫方法”的基礎上進行修正而來的。按照原作者的說發和程式碼來寫自定義控制元件,結果使用的時候出了不少問題。我之前對於這塊完全沒有去接觸,又看到有人說網上的例子都是大同小異,很多細節也沒有說清
BaseExpandableListAdapter,二級列表的完全自定義(一)
普通的ListView已經無法滿足需要,下面來詳細說明如何使用二級列表,二級列表有很多地方會使用到,如常見的QQ好友分組,效果圖如下: 具體的內容包括表頭和表體,點選表頭會展開或合併表體,為方便表示,表頭和表體均為圖片加文字的佈局。 分析完成二級列表需要的一些東西: 一:
控制器轉場動畫自定義(2):modal/dismiss的實現
大家好,我是KK黃凱展,這次繼上篇的push/pop轉場動畫自定義後,我們把目標瞄準modal和dismiss這兩個傢伙,照舊,還是先把效果圖和預設搬出來給大家look一look~ 這是預設modal和dismiss的效果 這是自定義push和po
Django 筆記(四)模板標籤 ~ 自定義過濾器
模板標籤: 標籤在渲染的過程中提供任意的邏輯 語法: 由{% ... %} 和 {% end... %} 常用標籤: with:類似取別名 模版繼承: Django模版引擎中最強大也是最
(springboot)shiro安全框架自定義過濾器出現的幾個疑難雜症解決方案
問題一:多次重複重定向問題(匹配多個過濾器鏈重複呼叫其對應過濾器) 問題二:shiro認證時Realm會執行兩次 在使用springboot框架整合shiro安全認證框架時踩了很多坑,每次出問題網上都找不到其中的解決方案,這裡貼兩個我遇到的坑,以及其解決方案給大家,希望大
Shiro(三)——Shiro自定義Realm
Realm: 域。Shiro 從從 Realm 獲取安全資料(如使用者、角色、許可權),就是說 SecurityManager 要驗證使用者身份,那麼它需要從 Realm 獲取相應的使用者進行比較以確定使用者身份是否合法;也需要從 Realm 得到使用者相應的角色 / 許可權進行驗證使用者是否能進行
百度UEditor自定義上傳檔案儲存路徑(補充)
上一篇百度UEditor自定義上傳檔案儲存路徑發表後,再解決了線上管理、線上圖片和線上附件功能不能使用的問題。 需要修改FileManager類: 註釋掉的程式碼是原來jar包的程式碼,不再需要,可以刪除掉。 //private String di
jQuery基礎(鼠標事件,表單事件,鍵盤事件,自定義事件 篇)
1.7 傳遞 ret 文本 leave 右鍵 page content gree 1.jQuery鼠標事件之click與dbclick事件 方法一:$ele.click()(不帶參數) <div id="test">點擊觸發<div> $(
python第九天(自定義函數)
但是 程序 turn return 默認 自定義 括號 none for 一、.函數: 如果檢測一個元素的長度用len非常簡單,也可以寫個循環來做。 s = ‘asd‘ def my_len(): i = 0 for k in s:
ASP.NET WebApi OWIN 實現 OAuth 2.0(自定義獲取 Token)
href timespan 獲取 edi prot cep b- med 2-0 相關文章:ASP.NET WebApi OWIN 實現 OAuth 2.0 之前的項目實現,Token 放在請求頭的 Headers 裏面,類似於這樣: Accept: application
博客園樣式自定義(待更新)
ava white tde 百度一下 padding element win timer rip 總感覺這件事情做的晚了哈哈。 以前寫博客總是一個人默默地寫,現在竟然出現了兩個吐槽我挖坑不填的哈哈。(非常感謝~) 大概是終於有個人能夠督促自己學習了,你們怎麽不早點來?!!
idea+maven + spring security +springmvc入門 (自定義登入頁面),附idea如何建立web專案
第一次使用idea,上午在eclipse中 學習了spring security 入門,下午試試在idea中搭建。 剛開始 我以為 直接將eclipse的 檔案 copy過來就行了,結果發現copy過來以後 各種報錯。 後來把m
Android應用--簡 美音樂播放器獲取專輯圖片(自定義列表介面卡)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
web前端(4)—— 常用標籤1 洗禮靈魂,修煉python(55)--爬蟲篇—知識補充—RFC 2616 http狀態碼
標題標籤h1~h6 顧名思義,這些就是把字型設定為大字型的,就如部落格園的這個編輯器裡的格式: 不信的話我們自己設定看看:好的,從本篇文章開始,我們需要動手了 <!DOCTYPE html> <html lang="en"> <
iOS 底部按鈕 工具欄 Tabbar 及 Tabbar 的自定義(中間突出)
大多數應用使用系統自帶的Tabbar就能夠滿足需求 通常情況都是在AppDelegate.m裡建立一個UITabBarController將其它的控制器用UINavigationController包裝一層,再新增到UITabBarController的viewControllers裡。再將UI
skill——zbbix(低級別發現 與 zabbix 自定義監控項)
低級別發現Low-level discovery(LLD) 在對主機的監控中,可能出現這樣的情況,例如對某主機網絡卡eth0進行監控,可以指定需要監控的網絡卡是 eth0,而將網絡卡作為一個通用監控項時,根據主機作業系統的不同,網絡卡的名稱也不完全相同,有些作業系統的網絡卡名稱是 eth 開頭的,而有些