【问题标题】:advice for annotation on either class or method关于类或方法的注释建议
【发布时间】:2012-11-26 23:08:40
【问题描述】:

我有以下问题:

我已经为安全创建注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Inherited
@Documented
public @interface Security {
     Role[] roles();
}

我现在用这个注解来注解类和方法。在某些情况下,该类使用此注解进行注解,并且该类中的特定方法也使用具有不同角色的@Security 进行注解。

如何创建@Before 通知,以捕获使用@Security 注释的类中使用@Security 注释的方法或方法,以及在类和方法上都有注释的情况下获得更具体的定义。

我显然还需要注释的内容(角色)。

有可能吗?

如果我在类之间有继承,它们都具有@Security 注释以获得最具体的定义,是否也有可能?

约西

【问题讨论】:

  • 你不是在重塑 Spring Security 吗?我是,为什么?
  • 我发现 spring security 对我来说太复杂了

标签: spring annotations aop spring-aop


【解决方案1】:

这应该可以工作(原生 AspectJ 代码,但如果您愿意,可以转换为 @Aspect):

pointcut secureMethods() : execution(@Security * *(..));

pointcut secureTypes() : execution(* (@Security *).*(..));

Object around(Security security) : secureMethods() && @annotation(security) {
    apply(security);
    return proceed(security);
}

Object around(Security security) : secureTypes() && !secureMethods() && @target(security) {
    apply(security);
    return proceed(security);
}

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多