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 回答