我正在将我的Spring Security从3.1.0升级到3.1.3并遇到了一个破坏我设置的更改。
我一直在使用自定义SecurityExpressionRoot来公开一个与intercept-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之后Spring无法评估“hasProjectAuthority”方法:
EL1004E:(pos 0):方法调用:在org.springframework.security.web.access.expression.WebSecurityExpressionRoot类型
上找不到方法hasProjectAuthority(java.lang.String)这个移动到了什么地方?
答案 0 :(得分:7)
您的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>