javaspring:如何在其他注解中封装注解?

vddsk6oq  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(554)

是否可以用值将注解封装在其他注解中?
我的人生有很多终点 API 并希望自动化所需的 roles / permissions 用于端点访问。
以下是当前代码:

@RestController
@RequestMapping("/health")
public class HealthController {
    @GetMapping("/isAlive")
    @PreAuthorize("hasAnyAuthority('ISALIVE', 'HEALTH_ENDPOINT')")
    public String isAlive() {
        return "Server is up and running";
    }

    @GetMapping("/hello")
    @PreAuthorize("hasAnyAuthority('HELLO', 'HEALTH_ENDPOINT')")
    public String hello() {
        return "Hello";
    }
}

我有 2 每个端点的权限,第一个是Map和方法的名称,第二个是类的名称。
在这个例子中,只有 2 不同的结束点使它容易,但成品将有数百个和做手工所有的权力将是容易出错,效率不高。
这是期望的结果:

@RestController
@RequestMapping("/health")
public class HealthController {
    @GetMapping("/isAlive")
    @MyAuthorisationAnnotation
    public String isAlive() {
        return "Server is up and running";
    }

    @GetMapping("/hello")
    @MyAuthorisationAnnotation
    public String hello() {
        return "Hello";
    }
}

哪里 @MyAuthorisationAnnotation 会给 @PreAuthorize 注解。
有可能吗?

yv5phkfx

yv5phkfx1#

是否可以用值将注解封装在其他注解中?
一个注解可以有另一个注解作为成员。

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAuthorizationAnnotation {
   PreAuthorize value() default @PreAuthorize("hasAnyAuthority('HELLO', 'HEALTH_ENDPOINT')"); 
}

但是我不认为这有帮助。我不熟悉spring,但是我认为这个帖子解决了你的问题,因为看起来 @PreAuthorize 可以应用于注解,以便在方法中使用选中的注解时可以利用可传递性。
解决方案的职位

相关问题