2012-07-11 171 views
3

我嘗試讓角色層次結構在我的應用程序中工作。我唯一想要的是所有級別的定義層次結構:在url級別,現在也在視圖級別(在我的jsp文件中)。如何在jsp中獲得spring安全角色層次結構?

我用下面的設置:

 <beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased"> 
     <beans:property name="decisionVoters"> 
      <beans:list> 
       <beans:ref bean="roleHierarchyVoter"/> 
       <beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter"> 
        <beans:property name="expressionHandler"> 
         <beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"> 
          <beans:property name="roleHierarchy" ref="roleHierarchy"/> 
         </beans:bean> 
        </beans:property> 
       </beans:bean> 
       <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 

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

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

<http auto-config="true" use-expressions="true" access-decision-manager-ref="accessDecisionManager"> 
    ... 
</http> 

對於URL級別(攔截的URL),它的工作原理非常好,但在我的JSP文件,沒有工作。問題是我沒有正確理解配置以使角色層次結構起作用。

<security:authorize access="hasRole('ROLE_ADMIN')"> 
    <div class="span4"> 
     <h2>Admin</h2> 
    </div><!--/span--> 
</security:authorize> 
<security:authorize access="hasRole('ROLE_OWNER')"> 
    <div class="span4"> 
     <h2>Owner</h2> 
    </div><!--/span--> 
</security:authorize> 
<security:authorize access="hasRole('ROLE_DISTRIBUTOR')"> 
    <div class="span4"> 
     <h2>Distributor</h2> 
    </div><!--/span--> 
</security:authorize> 

我用這個簡單的例子在視圖級別測試角色層次結構,但它不起作用。只有具有管理員角色的用戶才能看到他的區塊,但不能看到其他區塊。

有一個想法我做錯了我的配置。

+0

你有這個問題的答案?我面臨同樣的問題... – ZheFrench 2013-10-16 09:00:04

+0

回答這裏的春季4,百里香和註釋配置: [鏈接](https://stackoverflow.com/a/45419894/1784136) – arctica 2017-07-31 15:33:51

回答

0

我有同樣的問題(Spring Security 3.2.5)。

通過聲明解決了我的DefaultWebSecurityExpressionHandler部分<http>

<!-- This must go before the http element in order to be used by security:authorize tags using the access attribute --> 
<!-- https://jira.spring.io/browse/SEC-1452 --> 
<beans:bean id="webSecurityExpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"> 
    <beans:property name="roleHierarchy" ref="roleHierarchy" /> 
</beans:bean> 

看到 https://jira.spring.io/browse/SEC-1452http://forum.spring.io/forum/spring-projects/security/67494-configuration-of-spring-security-3-0m1-expression-handler-bug/page3

相關問題