@PreAuthorize 注解组合
@PreAuthorize annotations combining
我使用几个 @PreAuthorize
-base 注释来保护我的 REST API 方法。
@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 {
}
和
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ROLE_B')")
public @interface ForB {
}
我的 @PreAuthorize
表达式比简单的 hasRole('ROLE_x)
复杂一点,我不想在 @ForA
、@ForB
和 [=19] 中将它们加倍=].
是否可以基于 @ForA
和 @ForB
创建 @ForAorB
注释而不是 @PreAuthorize("hasRole('ROLE_A') or hasRole('ROLE_B')")
中的表达式加倍?
我试过了,但看起来像
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ForA @ForB
public @interface ForAorB {
}
实际上作为 @ForAandB
但不是 @ForAorB
那行不通,因为注释(至少在这种情况下)是 "additive"。单个 @PreAuthorize
注释将为您提供 OK 或 NOK,并且无论任何其他可能的身份验证注释如何,它都决定了整个结果。
@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 {
}
所以对于 AND
它可以工作,但是你不能让它与 OR
一起工作,除非手写 @PreAuthorize
注释。
我使用几个 @PreAuthorize
-base 注释来保护我的 REST API 方法。
@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 {
}
和
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ROLE_B')")
public @interface ForB {
}
我的 @PreAuthorize
表达式比简单的 hasRole('ROLE_x)
复杂一点,我不想在 @ForA
、@ForB
和 [=19] 中将它们加倍=].
是否可以基于 @ForA
和 @ForB
创建 @ForAorB
注释而不是 @PreAuthorize("hasRole('ROLE_A') or hasRole('ROLE_B')")
中的表达式加倍?
我试过了,但看起来像
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ForA @ForB
public @interface ForAorB {
}
实际上作为 @ForAandB
但不是 @ForAorB
那行不通,因为注释(至少在这种情况下)是 "additive"。单个 @PreAuthorize
注释将为您提供 OK 或 NOK,并且无论任何其他可能的身份验证注释如何,它都决定了整个结果。
@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 {
}
所以对于 AND
它可以工作,但是你不能让它与 OR
一起工作,除非手写 @PreAuthorize
注释。