でカスタム<intercept-url>
エクスプレッションを処理するために、カスタム エクスプレッション ハンドラを に提供しましたWebExpressionVoter
。このカスタム式ハンドラーWebSecurityExpressionHandler
は と同じ方法で実装し、DefaultWebSecurityExpressionHandler
そのメソッドをオーバーライドしcreateEvaluationContext
て、カスタム ルート オブジェクト セットを持つコンテキストを返します。このカスタム ルート オブジェクトはWebSecurityExpressionRoot
、別のメソッドで単純に拡張されます。これは DefaultWebSecurityExpressionHandler がそれを行う方法です:
public EvaluationContext createEvaluationContext(Authentication authentication, FilterInvocation fi) {
StandardEvaluationContext ctx = new StandardEvaluationContext();
SecurityExpressionRoot root = new WebSecurityExpressionRoot(authentication, fi);
root.setTrustResolver(trustResolver);
root.setRoleHierarchy(roleHierarchy);
ctx.setRootObject(root);
return ctx;
}
の新しいオブジェクトを作成し、WebSecurityExpressionRoot
それを返す評価コンテキストのルート オブジェクトとして割り当てますが、WebSecurityExpressionRoot
DI の使用を禁止します (その作成は Spring によって処理されないため)。カスタム式ルートを xml ファイルに構成して、拡張子に挿入し、WebSecurityExpressionHandler
注釈を使用してリソースを挿入できるようにします。
問題は、WebSecurityExpressionRoot
のコンストラクターへのパラメーターが動的であり、xml で Bean として指定するときに指定できないことです。WebSecurityExpressionHandler
カスタム式ルートを DIのサブクラスに挿入する方法はありますか?