Spring Security(18)——Jsp標簽

目錄

1.1?????authorize

1.2?????authentication

1.3?????accesscontrollist

?

?????? Spring Security也有對Jsp標簽的支持的標簽庫。其中一共定義了三個標簽:authorize、authentication和accesscontrollist。其中authentication標簽是用來代表當前Authentication對象的,我們可以利用它來展示當前Authentication對象的相關信息。另外兩個標簽是用于權限控制的,可以利用它們來包裹需要保護的內容,通常是超鏈接和按鈕。

???????如果需要使用Spring Security的標簽庫,那么首先我們應當將對應的jar包spring-security-taglibs-xxx.jar放入WEB-INF/lib下;其次我們需要在頁面上引入Spring Security的標簽庫。

<%@?taglib?prefix="sec"?uri="http://www.springframework.org/security/tags"?%>

???????接下來就可以在頁面上自由的使用Spring Security的標簽庫提供的標簽了。

?

1.1?????authorize

?????? authorize是用來判斷普通權限的,通過判斷用戶是否具有對應的權限而控制其所包含內容的顯示,其可以指定如下屬性。

?????? 1、access

?????? access屬性需要使用表達式來判斷權限,當表達式的返回結果為true時表示擁有對應的權限。

???<sec:authorize?access="hasRole('admin')">

??????<a?href="admin.jsp">admin?page</a>

???</sec:authorize>

???????需要注意的是因為access屬性是使用表達式的,所以我們必須確保ApplicationContext中存在一個WebSecurityExpressionHandler,最簡單的辦法就是直接使用NameSpace,通過設置http元素的use-expressions="true"讓NameSpace自動為我們創建一個WebSecurityExpressionHandler。

?

?????? 2、ifAllGrantedifAnyGrantedifNotGranted

???????這三個屬性的用法類似,它們都接收以逗號分隔的權限列表,且不能使用表達式。ifAllGranted表示需要包含所有的權限,ifAnyGranted表示只需要包含其中的任意一個即可,ifNotGranted表示不能包含指定的任意一個權限。

???<!--?需要擁有所有的權限?-->

???<sec:authorize?ifAllGranted="ROLE_ADMIN">

??????<a?href="admin.jsp">admin</a>

???</sec:authorize>

???<!--?只需擁有其中任意一個權限?-->

???<sec:authorize?ifAnyGranted="ROLE_USER,ROLE_ADMIN">hello</sec:authorize>

???<!--?不允許擁有指定的任意權限?-->

???<sec:authorize?ifNotGranted="ROLE_ADMIN">

??????<a?href="user.jsp">user</a>

???</sec:authorize>

?

?????? 3、url

?????? url表示如果用戶擁有訪問指定url的權限即表示可以顯示authorize標簽包含的內容。

???<!--?擁有訪問指定url的權限才顯示其中包含的內容?-->

???<sec:authorize?url="/admin.jsp">

??????<a?href="admin.jsp">admin</a>

???</sec:authorize>

?

?????? 4、method

?????? method屬性是配合url屬性一起使用的,表示用戶應當具有指定url指定method訪問的權限,method的默認值為GET,可選值為http請求的7種方法。

???<!--?擁有訪問指定url的權限才顯示其中包含的內容?-->

???<sec:authorize?url="/admin.jsp">

??????<a?href="admin.jsp">admin</a>

???</sec:authorize>

???????限制訪問方法是通過http元素下的intercept-url元素的method屬性來指定的,如:

???<security:intercept-url?pattern="/admin.jsp"?access="ROLE_ADMIN"?method="POST"/>??

?

?????? 5、var

???????用于指定將權限鑒定的結果存放在pageContext的哪個屬性中。該屬性的主要作用是對于在同一頁面的多個地方具有相同權限鑒定時,我們只需要定義一次,然后將鑒定結果以var指定的屬性名存放在pageContext中,其它地方可以直接使用之前的鑒定結果。

???<sec:authorize?access="isFullyAuthenticated()"?var="isFullyAuthenticated">

??????只有通過登錄界面進行登錄的用戶才能看到1。<br/>

???</sec:authorize>

???上述權限的鑒定結果是:${isFullyAuthenticated }<br/>

???<%if((Boolean)pageContext.getAttribute("isFullyAuthenticated")) {%>

?? ???只有通過登錄界面進行登錄的用戶才能看到2。

???<%}%>

?

各屬性對應的優先級

???????既然我們可以通過屬性access、url、ifAllGranted、ifAnyGranted等來指定應當具有的權限,那么當同時指定多個屬性時,它們的作用效果是什么樣的呢?authorize標簽進行權限鑒定的屬性根據優先級的不同可以分為三類,access為一類;url為一類;ifAllGranted、ifAnyGranted和ifNotGranted為一類。這三類將同時只有一類產生效果。它們的優先級如下:

?????? 1、access具有最高的優先級,如果指定了access屬性,那么將以access屬性指定的表達式來鑒定當前用戶是否有權限。不管結果如何,此時其它屬性都將被忽略。

?????? 2、如果沒有指定access屬性,那么url屬性將具有最高優先級,此時將直接通過url屬性和method屬性(默認為GET)來鑒定當前用戶是否有權限。不管結果如何,此時都將忽略ifAllGranted、ifAnyGranted和ifNotGranted屬性。

?????? 3、如果access和url都沒有指定,那么將使用第三類屬性來鑒定當前用戶的權限。當第三類里面同時指定了多個屬性時,它們將都發生效果,即必須指定的三類權限都滿足才認為是有對應的權限。如ifAllGranted要求有ROLE_USER的權限,同時ifNotGranted要求不能有ROLE_ADMIN的權限,則結果是它們的并集,即只有擁有ROLE_USER權限,同時不擁有ROLE_ADMIN權限的用戶才被允許獲取指定的內容。

?

1.2?????authentication

?????? authentication標簽用來代表當前Authentication對象,主要用于獲取當前Authentication的相關信息。authentication標簽的主要屬性是property屬性,我們可以通過它來獲取當前Authentication對象的相關信息。如通常我們的Authentication對象中存放的principle是一個UserDetails對象,所以我們可以通過如下的方式來獲取當前用戶的用戶名。

???<sec:authentication?property="principal.username"/>

?

???????當然,我們也可以直接通過Authentication的name屬性來獲取其用戶名。

???<sec:authentication?property="name"/>

???? property屬性只允許指定Authentication所擁有的屬性,可以進行屬性的級聯獲取,如“principle.username”,不允許直接通過方法進行調用。

???????除了property屬性之外,authentication還可以指定的屬性有:var、scope和htmlScape。

var屬性

?????? var屬性用于指定一個屬性名,這樣當獲取到了authentication的相關信息后會將其以var指定的屬性名進行存放,默認是存放在pageConext中。可以通過scope屬性進行指定。此外,當指定了var屬性后,authentication標簽不會將獲取到的信息在頁面上進行展示,如需展示用戶應該通過var指定的屬性進行展示,或去掉var屬性。

???<!--?將獲取到的用戶名以屬性名username存放在session中?-->

???<sec:authentication?property="principal.username"?scope="session"?var="username"/>

?? ${username }

?

scope屬性

???????與var屬性一起使用,用于指定存放獲取的結果的屬性名的作用范圍,默認我pageContext。Jsp中擁有的作用范圍都進行進行指定。

?

htmlScape屬性

???????表示是否需要將html進行轉義。默認為true。

?

1.3?????accesscontrollist

?????? accesscontrollist標簽是用于鑒定ACL權限的。其一共定義了三個屬性:hasPermission、domainObject和var,其中前兩個是必須指定的。hasPermission屬性用于指定以逗號分隔的權限列表;domainObject用于指定對應的域對象;而var則是用以將鑒定的結果以指定的屬性名存入pageContext中,以供同一頁面的其它地方使用。需要注意的是使用accesscontrollist標簽時ApplicationContext中必須存在一個PermissionEvaluator bean,因為accesscontrollist標簽就是通過PermissionEvaluator來鑒定對應的權限的。如果我們正在使用Spring Security的ACL模塊,那么PermissionEvaluator通常就對應著AclPermissionEvaluator。此外,如果domainObject屬性指定的domainObject為null則默認認為是有權限的,否則如果當前Authentication對象為null則默認認為是沒有權限的。

???<sec:accesscontrollist?hasPermission="1,2"?domainObject="${someTargetDomainObject }"?>

??????如果當前Authentication對指定的domainObject擁有指定的hasPermission則將可以看到這部分內容。

???</sec:accesscontrollist>

?

(注:本文是基于Spring Security3.1.6所寫)

?

轉載于:https://www.cnblogs.com/fenglan/p/5913502.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

e4a html文本,E4A?怎么將剪貼版中的文本?粘貼到窗口的光標處啊?求個代碼

滿意答案百幻蝶V木桃2017.05.20采納率&#xff1a;49% 等級&#xff1a;8已幫助&#xff1a;1710人■如何打開剪貼板查看器 當您從某個程序剪切或復制信息時&#xff0c;該信息會被移動到剪貼板并保留在那里&#xff0c;直到您清除剪貼板或者您剪切或復制了另一片信息。“剪…

電腦技巧:七款U盤修復軟件

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

cdrx8如何批量導出jpg_Coreldraw/CDR X8 存低版本打開問題 – 數碼打印破圖 – Coreldraw/CDR軟件崩潰 – 漸變導位圖角度變了...

Coreldraw/CDR X8 存低版本打開問題 – 數碼打印破圖 – Coreldraw/CDR軟件崩潰 – 漸變導位圖角度變了Coreldraw/CDR X8 存低版本打開問題各位大神&#xff0c;小弟最近安裝了Coreldraw/CDR X8 &#xff0c;在設計文件時&#xff0c;會遇到給文字設計套白邊&#xff0c;問題來…

[deviceone開發]-do_SlideListView的簡單示例

一、簡介 利用提供的SlideListVIew實現那種cell可以滑動露出底部按鈕的功能 主要組件&#xff1a;do_slidelistview 二、效果圖 三、相關討論 http://bbs.deviceone.net/forum.php?modviewthread&tid269 四、相關下載 https://github.com/do-project/code4do/tree/master/…

Git:Rebase和Merge之間的區別,看完這篇文章你就懂了!

社區中長期以來一直在爭論我們應該使用Merge還是Rebase。有人會說Merge更好&#xff0c;因為它保留了最完整的工作歷史。其他人則認為&#xff0c;Rebase變得更整潔&#xff0c;這使審閱者的生活更輕松&#xff0c;更高效。本文將解釋合并和重新設置之間的區別是什么&#xff0…

計算機b級英語翻譯,英語B級考試翻譯必備常用短句

英語B級考試翻譯必備常用短句1. Who would say like this?誰會這樣說呢&#xff1f;2. What time shall we leave?我們什么時候出發呢&#xff1f;3. We are going to play golf this Sunday.我們這個星期天要去打高爾夫球。4. Do you want to go out or stay at home?你想出…

weblogic概覽下的上下文根配置_Weblogic服務下獲取上下文路勁問題

問題描述&#xff1a;如果一個項目用weblogic部署的服務&#xff0c;在web_inf文件夾下只有web.xml文件&#xff0c;沒有配置weblogic.xml文件時&#xff0c;這是用類.class.getClassLoader().getResource("").getPath() 該方法獲取到的絕對路勁是如下&#xff1a;/…

干貨:SQLServer數據庫基于PowerDesigner逆向工程生成PDM文件

在日常的開發工程中&#xff0c;很多時候需要提供數據庫設計文檔&#xff0c;如果當時數據庫設計沒有采用PowerDesinger&#xff0c;到后期需要給客戶提供數據庫設計文檔、后期項目運維就會比較麻煩&#xff0c;今天給大家介紹如何使用PowerDesigner的逆向工程生成SQLServer數據…

檢查 Linux 服務器性能

如何用十條命令在一分鐘內檢查 Linux 服務器性能 如果你的Linux服務器突然負載暴增&#xff0c;報警短信快發爆你的手機&#xff0c;如何在最短時間內找出Linux性能問題所在&#xff1f;來看Netflix性能工程團隊的這篇博文&#xff0c;看它們通過十條命令在一分鐘內對機器性能問…

html 圓球的百分比,HTML5 很酷的球形器皿中水波狀的進度條

CSS語言&#xff1a;CSSSCSS確定* {box-sizing: border-box;}html,body {height: 100%;}body {background-color: #1a1a1a;font-family: sans-serif;font-size: 15px;color: #ccc;}input[type"text"] {background-color: transparent;margin-top: 30px;border: 0;bor…

SQLServer基礎:TOP、OFFSET-FETCH、SET ROWCOUNT用法筆記

今天給大家介紹一下TOP、OFFSET-FETCH、SET ROWCOUNT用法筆記&#xff0c;希望對大家能有所幫助&#xff01;1、 TOP用法語法格式&#xff1a;TOP ( expression ) [ PERCENT ] [ WITH TIES ]expression&#xff1a;返回行數的數值表達式PERCENT&#xff1a;指返回的結果集行的百…

取本地數據_深入理解Kafka服務端之Follower副本如何同步Leader副本的數據

一、場景分析Kafka采用的是主寫主讀的方式&#xff0c;即客戶端的讀寫請求都由分區的Leader副本處理&#xff0c;那么Follower副本要想保證和Leader副本數據一致&#xff0c;就需要不斷地從Leader副本拉取消息來進行同步。由于同一個分區的Leader副本和Follower副本分布在不同的…

用計算機0和1表達難舍之情,表達不舍之情的句子是

1. 表達難舍之情的句子“悲莫悲兮生別離&#xff0c;樂莫樂兮新相知”&#xff0c;離別送行情難自禁。1.與君離別意&#xff0c;同是宦游人。 海內存知己&#xff0c;天涯若比鄰。(王勃《送杜少府之任蜀州》) 2.又送王孫去&#xff0c;萋萋滿別情。(李白《送友人》) 3.春草明年…

SQLServer子查詢相關知識筆記

今天給大家介紹以下SQLServer子查詢相關知識&#xff0c;希望對大家能有所幫助&#xff01;1、子查詢概念介紹子查詢可以嵌套在SELECT、INSERT、UPDATE、DELETE語句或其他子查詢語句中的查詢&#xff0c;子查詢一般作為查詢中間結果集角色&#xff0c;子查詢也稱為內部查詢或內…

使用react的好處_react的優點是什么呀-問答-阿里云開發者社區-阿里云

首先react通過介紹新的聲明式語法JSX來重新定義視圖開發&#xff0c;優點其實官網就有&#xff0c;不過我可以簡單說兩句&#xff1a;第一&#xff0c;學會了react以及這個JSX語法&#xff0c;你不光可以通過react寫web&#xff1b;也可以通過react-native寫ios或者android的應…

Linux運行級詳解

對于那些在DOS/Win9x/NT平臺下的高級用戶而言&#xff0c;Linux似乎是一個怪物。沒有config.sys&#xff0c;沒有 autoexec.bat&#xff0c;具有個人特色的機器配置不知道從何開始。 需要說明的是&#xff0c;很多人認為Linux是Unix的一個克隆&#xff0c;但是&#xff0c;這種…

軟件:推薦八款電腦實用軟件,你都用過嗎?

今天給大家推薦八款電腦非常實用的軟件&#xff0c;希望對大家能有所幫助&#xff01;1、Audio Hijack Pro一款Mac 上的錄音軟件。它比較強大的功能是可以錄制多個應用的聲音&#xff0c;然后組合成一個結果&#xff0c;然后輸出。2、快貼一個跨平臺剪切板同步軟件。你只需要簡…