我有一个带有一些共享@RequestMapping
方法的抽象类(父类),并且有一些@Controller
类实现它(子类)。
我在类级别使用@Secured
注释子类,但父类方法不受此保护。 (即,AOP拦截器只考虑子类的方法,而不考虑父类。)
不幸的是,每个子类都需要受到不同角色的保护,因此不可能使用常见的@Secured
限制来注释父类。可以覆盖父类中的所有方法,以便它们受到保护,但我想避免这种丑陋的解决方法。
因此我想知道是否有任何我可以覆盖的内容(例如拦截器,建议或元数据提供程序,以便类层次结构中的任何方法都会在目标类上观察@Secured
注释)?
其他信息:
似乎注释解决方案已实现
org.springframework.security.access.method.AbstractFallbackMethodSecurityMetadataSource .getAttributes(Method, Class<?>)
实际上它只查看了方法的声明类(在我的例子中,是父类)。但是,我对代理编程并不太熟悉,所以欢迎任何关于如何安全地实现我想要的更改的建议。
答案 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;
}