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,嗯?我说的是为什么它永远不会为或工作。你不能让它工作,所以手工写注释。