2013-01-03 416 views
4

我正在將我的Spring Security從3.1.0升級到3.1.3,並遇到了一個正在破壞我的設置的更改。用Spring Security 3.1.3自定義SecurityExpressionRoot方法

我一直在使用自定義SecurityExpressionRoot來公開一個用於攔截url條目的方法。

<http entry-point-ref="forbiddenAccessEntryPoint" use-expressions="true" create-session="never" 
     access-decision-manager-ref="webAccessDecisionManager"> 

    <intercept-url pattern="/licenses*" access="hasProjectAuthority('LICENSES')"/> 

SecurityExpressionRoot通過自定義的DefaultMethodSecurityExpressionHandler注入。

這在3.1.0工作正常,但之後升級到3.1.3春節無法評估 「hasProjectAuthority」 的方法:

EL1004E:(POS 0):方法調用:方法hasProjectAuthority(java.lang.String中)無法找到org.springframework.security.web.access.expression.WebSecurityExpressionRoot類型

這是否在某處移動?

回答

7
  • 嘗試將您的代碼從自定義SecurityExpressionRoot移動到自定義WebSecurityExpressionRoot中。
  • 確保您的自定義WebSecurityExpressionRoot通過DefaultWebSecurityExpressionHandler.createSecurityExpressionRoot注入到你的WebExpressionVoter這樣

你的XML可能的外觀:

<security:http access-decision-manager-ref="customAccessDecisionManagerBean"> 
    .... 
<security:http/> 

<bean id="customWebSecurityExpressionHandler" class="com.domain.security.CustomWebSecurityExpressionHandler"/> 
<bean id="customAccessDecisionManagerBean" class="org.springframework.security.access.vote.AffirmativeBased"> 
    <property name="decisionVoters"> 
     <list> 
      <bean class="org.springframework.security.web.access.expression.WebExpressionVoter"> 
       <property name="expressionHandler" ref="customWebSecurityExpressionHandler" /> 
      </bean> 
     </list> 
    </property> 
</bean> 
+0

我把它切換到WebSecruityExpressionRoot而不僅僅是一個SecurityExpressionRoot但它沒有幫助。同樣的問題。 – ryber

+0

它通過自定義SecurityExpressionHandler 注入到WebExpressionVoter中? –

+0

它由DefaultMethodSecurityExpressionHandler的createSecurityExpressionRoot方法返回(這是一個SecurityExpressionHandler – ryber

相關問題