のような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
実装し、カスタム ルート オブジェクトを設定するために使用します。WebSecurityExpressionHandler
DefaultWebSecurityExpressionHandler
createEvaluationContext
@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
}
これは問題にアプローチする正しい方法ですか?