4

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):メソッド呼び出し:メソッドhasProjectAuthority(java.lang.String)がorg.springframework.security.web.access.expression.WebSecurityExpressionRootタイプに見つかりません

これはどこかに移動しましたか?

4

1 に答える 1

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>
于 2013-01-03T15:50:29.133 に答える