3

@RequestMappingいくつかの共有メソッドを持つ抽象クラス(親クラス)があり@Controller、それを実装するいくつかのクラス(サブクラス)があります。

サブクラスに@Securedクラスレベルで注釈を付けましたが、親クラスのメソッドはこれによって保護されていません。(つまり、AOPインターセプターは、親クラスではなく、サブクラスのメソッドのみを考慮します)。

残念ながら、サブクラスはそれぞれ異なる役割で保護する必要があるため、共通の@Secured制限で親クラスに注釈を付けることはできません。親クラスのすべてのメソッドをオーバーライドして保護することは可能ですが、この醜い回避策は避けたいと思います。

したがって、オーバーライドできるものはありますか(たとえば、クラス階層内の任意のメソッドが@Securedターゲットクラスのアノテーションを監視するように、インターセプター、アドバイス、またはメタデータプロバイダー)?

追加情報:

アノテーションの解決は org.springframework.security.access.method.AbstractFallbackMethodSecurityMetadataSource.getAttributes(Method, Class<?>)に実装されているようで、実際にはメソッドの宣言クラス(私の場合は親クラス)のみを調べました。ただし、私はプロキシプログラミングにあまり詳しくないので、必要な変更を安全に実装する方法についてのアドバイスを歓迎します。

4

1 に答える 1

1

SecuredAnnotationSecurityMetadataSource次のようなもので簡単にオーバーライドできるようです

@Override
public Collection<ConfigAttribute> getAttributes(Method method, Class<?> targetClass) {
    Collection<ConfigAttribute> out = super.getAttributes(method, targetClass);

    if (out == null || out.isEmpty()) {
        out = findAttributes(targetClass);
        if (out == null) out = Collections.emptyList();
    }

    return out;
}
于 2012-11-23T12:08:51.047 に答える