类上的@Secured注释不适用于父类方法

时间:2012-11-22 15:23:22

标签: spring-mvc spring-security aop

我有一个带有一些共享@RequestMapping方法的抽象类(父类),并且有一些@Controller类实现它(子类)。

我在类级别使用@Secured注释子类,但父类方法不受此保护。 (即,AOP拦截器只考虑子类的方法,而不考虑父类。)

不幸的是,每个子类都需要受到不同角色的保护,因此不可能使用常见的@Secured限制来注释父类。可以覆盖父类中的所有方法,以便它们受到保护,但我想避免这种丑陋的解决方法。

因此我想知道是否有任何我可以覆盖的内容(例如拦截器,建议或元数据提供程序,以便类层次结构中的任何方法都会在目标类上观察@Secured注释)?

其他信息:

似乎注释解决方案已实现 org.springframework.security.access.method.AbstractFallbackMethodSecurityMetadataSource .getAttributes(Method, Class<?>)实际上它只查看了方法的声明类(在我的例子中,是父类)。但是,我对代理编程并不太熟悉,所以欢迎任何关于如何安全地实现我想要的更改的建议。

1 个答案:

答案 0 :(得分: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;
}