2013-01-03 381 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

相关问题