Java @预授权注释组合

Java @预授权注释组合,java,spring,spring-security,annotations,Java,Spring,Spring Security,Annotations,我使用了几个@PreAuthorize-base注释来保护我的RESTAPI方法 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @PreAuthorize("hasRole('ROLE_A') or hasRole('ROLE_B')") public @interface ForAorB { } 同时我有 @Target(ElementType.METHOD) @Retention(RetentionPolic

我使用了几个
@PreAuthorize
-base注释来保护我的RESTAPI方法

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ROLE_A') or hasRole('ROLE_B')")
public @interface ForAorB {
}
同时我有

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ROLE_A')")
public @interface ForA {
}

我的
@PreAuthorize
表达式比简单的
hasRole('ROLE_x)
表达式要复杂一点,我不想在
@ForA
@ForB
@ForAorB
中将它们加倍

是否可以基于
@ForA
@ForB
创建
@ForAorB
注释,而不是在
@PreAuthorize(“hasRole('ROLE_A'))或hasRole('ROLE_B')”中加倍的表达式

我试过这个,但看起来像

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ForA @ForB
public @interface ForAorB {
}

实际上作为
@ForAandB
工作,但不作为不会工作的
@ForAorB

工作,因为注释(至少在本例中)是“附加的”。一个
@PreAuthorize
注释将为您提供OK或NOK,并决定整个结果,而不考虑任何其他可能的auth注释

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ForA @ForB
public @interface ForAorB {
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ROLE_A')")
@PreAuthorize("hasRole('ROLE_B')")
public @interface ForAorB {
}

所以对于
来说,它是有效的,但是你不能让它与
一起工作,除非手工编写
@PreAuthorize
注释。

这不起作用,因为注释(至少在本例中)是“附加的”。一个
@PreAuthorize
注释将为您提供OK或NOK,并决定整个结果,而不考虑任何其他可能的auth注释

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ForA @ForB
public @interface ForAorB {
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ROLE_A')")
@PreAuthorize("hasRole('ROLE_B')")
public @interface ForAorB {
}

所以对于
来说,它是有效的,但是除了手工编写
@PreAuthorize
注释外,你不能让它与
一起工作。

不幸的是,
@PreAuthorize
不能重复。@AndriyKryvtsun,嗯?我说的是为什么它永远不会为
工作。你不能让它工作,所以手工写注释。不幸的是,
@PreAuthorize
不能重复。@AndriyKryvtsun,嗯?我说的是为什么它永远不会为
工作。你不能让它工作,所以手工写注释。