3

のようなintercept-urlパターンを指定したいpattern = hasCollege('college1',college2')です。そのために、私は次のアプローチを考えています:

a)WebExpressionVoterカスタム式ハンドラーを使用するように構成する

<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
    <beans:property name="decisionVoters">
        <beans:list>
            <beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
                <beans:property name="expressionHandler" ref="myWebSecurityExpressionHandler"/>
            </beans:bean>
        </beans:list>
    </beans:property>
</beans:bean>
<beans:bean id="myWebSecurityExpressionHandler" class="com.daud.security.EEWebSecurityExpressionHandler"/>

b)の方法でEEWebSecurityExpressionHandler実装し、カスタム ルート オブジェクトを設定するために使用します。WebSecurityExpressionHandlerDefaultWebSecurityExpressionHandlercreateEvaluationContext

@Override
    public EvaluationContext createEvaluationContext(Authentication authentication, FilterInvocation fi) {
        StandardEvaluationContext ctx = new StandardEvaluationContext();
        SecurityExpressionRoot root = new MyWebSecurityExpressionRoot(authentication, fi);
        root.setTrustResolver(trustResolver);
        root.setRoleHierarchy(roleHierarchy);
        ctx.setRootObject(root);
        return ctx;
    }

c)新しい SPEL 式に対応する新しいメソッドをMyWebSecurityExpressionRoot拡張して宣言します。WebSecurityExpressionRoot

public final boolean hasCollege(String... colleges){
       // logic goes here
    }

これは問題にアプローチする正しい方法ですか?

4

1 に答える 1

1

春のセキュリティ設定では、次のことを行うことができます。

<http use-expressions="true">
    <intercept-url pattern="/**" access="isFullyAuthenticated() and principal.college matches 'Duke|USC'"/>

これは、プリンシパルに getCollege() メソッドがあることを前提としています。

于 2012-12-18T21:44:38.387 に答える