3

私は現在、Spring で単純な役割ベースのアクセス制御に取り組んでいます。AccessDecisionVoter の実装を使用しています。だから私は Object o パラメータが何であるか疑問に思います

public int vote(Authentication authentication, Object o, Collection<ConfigAttribute> configAttributes) { 

方法?Spring のドキュメントによると、これは「保護されたオブジェクト」です。インターセプト URL を使用すると、このボーターが呼び出されます。これはコントローラーですか? それとも単にURLの文字列ですか?

前もって感謝します。

4

1 に答える 1

7

Spring Security 3.1 を使用している場合は、vote メソッドの 2 番目の引数としてパラメーターを使用してAccessDecisionVoter、既に汎用である必要があります。<S>AccessDecisionVoter 実装のソース コード (例: WebExpressionVoterwhich implements AccessDecisionVoter<FilterInvocation>) を参照して、概念を理解することができます。これらの実装の一部では、保護されたオブジェクトをまったく使用する必要がないため、オブジェクトをジェネリック パラメーターとして使用します (例: RoleVoter)。

あなたの場合、おそらく必要なのはsupports(Class<?>)メソッドをオーバーライドすることです(ドキュメントから: AccessDecisionVoter 実装が、指定された保護されたオブジェクトの種類に対してアクセス制御投票を提供できるかどうかを示します) FilterInvokationWebExpressionVoter

@Override
public boolean supports(Class<?> clazz) {
    return clazz.isAssignableFrom(FilterInvocation.class);
}

そして、投票の実装は次のようになります。

@Override
public int vote(Authentication authentication, FilterInvocation fi,
    Collection<ConfigAttribute> attributes) {
  String url = fi.getRequestUrl();
  // rest of code, you can also fetch request / response from fi
于 2012-07-09T20:34:47.483 に答える