91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Security--Jsp標簽

發布時間:2020-06-29 03:00:25 來源:網絡 閱讀:487 作者:rr57e5f097216a3 欄目:開發技術

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

       如果需要使用Spring Security的標簽庫,那么首先我們應當將對應的jarspring-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是用來判斷普通權限的,通過判斷用戶是否具有對應的權限而控制其所包含內容的顯示,其可以指定如下屬性。下載  

       1access

       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

 下載  

       2ifAllGrantedifAnyGrantedifNotGranted

       這三個屬性的用法類似,它們都接收以逗號分隔的權限列表,且不能使用表達式。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>

 

       3url 下載  

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

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

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

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

   </sec:authorize>

 

       4method

       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"/>  

 

       5var

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

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

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

   </sec:authorize>

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

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

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

   <%}%>

 

各屬性對應的優先級

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

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

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

       3、如果accessurl都沒有指定,那么將使用第三類屬性來鑒定當前用戶的權限。當第三類里面同時指定了多個屬性時,它們將都發生效果,即必須指定的三類權限都滿足才認為是有對應的權限。如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"/>

 

       當然,我們也可以直接通過Authenticationname屬性來獲取其用戶名。下載  

   <sec:authentication property="name"/>

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

       除了property屬性之外,authentication還可以指定的屬性有:varscopehtmlScape

var屬性 下載  

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

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

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

   ${username }

 

scope屬性

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

 

htmlScape屬性 下載  

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

 

1.3     accesscontrollist

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

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

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

   </sec:accesscontrollist>


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长子县| 朝阳区| 定南县| 文安县| 海盐县| 五寨县| 兴安盟| 灵寿县| 留坝县| 道孚县| 广德县| 南城县| 大兴区| 苍溪县| 曲周县| 庐江县| 临沧市| 丹阳市| 洱源县| 罗城| 松溪县| 旬阳县| 深州市| 汶上县| 六枝特区| 曲麻莱县| 买车| 瓦房店市| 商丘市| 茶陵县| 萝北县| 磐安县| 曲沃县| 台东县| 红原县| 梁山县| 东乌珠穆沁旗| 萍乡市| 山西省| 大英县| 光泽县|