1. 程式人生 > >Spring Security應用開發(15)層次化角色體系

Spring Security應用開發(15)層次化角色體系

投票 rar 函數參數 prop lin span efault nag pass

1.1. 層次化角色體系

使用Spring Security的層次化角色體系,可以簡化復雜角色的配置。配置過程如下:

(1)首先需要在http結點中指定訪問決策管理器。

<!-- 角色和URL模式的對應關系
 access-decision-manager-ref:指定使用的訪問決策管理器。
 -->
 <sec:http auto-config="true" use-expressions="true"
   access-decision-manager-ref="acceessDecisionManager"
  >

 <sec:intercept-url 
pattern="/admin/**" access="hasRole(‘ROLE_ADMIN‘)" /> <sec:intercept-url pattern="/user/**" access="hasRole(‘ROLE_USER‘)" /> <sec:intercept-url pattern="/home/**" access="hasRole(‘ROLE_USER‘) or hasRole(‘ROLE_ADMIN‘)" /> </sec:http>

(2)指定用戶和角色的對應關系。

指定 super用戶擁有ROLE_SUPER角色,要求此用戶在擁有

ROLE_SUPER角色之後同時擁有ROLE_ADMINROLE_USER的角色。

<!-- 用戶和角色的對應關系 -->
 <sec:authentication-manager >
   <sec:authentication-provider>
     <sec:user-service>
      <sec:user name="zhangsan"  password="123456" authorities="ROLE_ADMIN"/>

      <sec:user name="wangwu"  password
="123456" authorities="ROLE_USER"/> <sec:user name="super" password="123456" authorities="ROLE_SUPER"/> </sec:user-service> </sec:authentication-provider> </sec:authentication-manager>

(3)配置訪問決策管理器。

在訪問決策管理器中需要指定使用的決策投票器。本文指定了三個投票器,分別是Web表達式投票器,層次化角色投票器和認證投票器。

 <!--
 acceessDecisionManager:訪問決策管理器。
 構造函數參數中指定所用的訪問決策投票器:
 WebExpressionVoter:Web表達式投票器,對hasRole()等等進行評估投票。
 RoleHierarchyVoter:層次化角色投票器。
 AuthenticatedVoter:認證投票器。
  -->
 <beans:bean  id="acceessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">

 <beans:constructor-arg>
    <beans:list>
         <beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
               <beans:property name="expressionHandler" ref="webSecurityExpressionHandler"/>
         </beans:bean>

         <beans:bean class="org.springframework.security.access.vote.RoleHierarchyVoter">
               <beans:constructor-arg ref="roleHierarchy"/>
         </beans:bean>

         

         <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>

    </beans:list>

 </beans:constructor-arg>

 </beans:bean>


 <!-- Web表達式處理器,創建表達式評估上下文。 -->

 <beans:bean id="webSecurityExpressionHandler" name="webSecurityExpressionHandler"

                class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler">

        <beans:property name="roleHierarchy" ref="roleHierarchy"/>

    </beans:bean>

    

(4)配置層次化角色的實現類。

層次化角色的默認實現類主要作用是根據層次化角色的配置建立起角色體系的層次關系。

<!-- 層次化角色的默認實現
  ROLE_SUPER同時擁有ROLE_ADMIN和ROLE_USER兩種角色,即擁有它們的全部權限。
 -->

 <beans:bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
 <beans:property name="hierarchy">
 <beans:value>
 ROLE_SUPER > ROLE_ADMIN
 ROLE_SUPER > ROLE_USER
 </beans:value>
 </beans:property>
 </beans:bean>

在經過上述配置後,使用super用戶登錄之後,可以訪問/home/user/admin以及/這四種類型的URL。由於super用戶擁有ROLE_SUPER角色,而ROLE_SUPER角色在層次化角色關系建立之後,包含了ROLE_ADMINROLE_USER角色。即同時擁有ROLE_ADMINROLE_USER兩種角色,可以訪問它們能訪問的任何URL

Spring Security應用開發(15)層次化角色體系