【问题标题】:@Secured annotation on a class does not apply to parent class methods类上的@Secured 注解不适用于父类方法
【发布时间】:2012-11-11 00:47:20
【问题描述】:

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

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

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

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

附加信息:

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

【问题讨论】:

    标签: spring-mvc spring-security aop


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多