java - Java Spring:如何将注释封装在另一个注释中?
问题描述
是否可以将注释封装在具有值的其他注释中?
我有很多端点,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
每个端点的权限,第一个是映射和方法的名称,第二个是类的名称。
在这个例子中,只有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
注释提供正确的参数。
可能吗?
解决方案
是否可以将注释封装在具有值的其他注释中?
一个注解可以有另一个注解作为成员。
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
可以应用于注释,因此如果您在方法中使用检查的注释,则可以利用传递性。
推荐阅读
- javascript - 如何在javascript中返回具有O(n)时间复杂度的相同字母元素?
- php - 读取和写入关联数组到 XML 文件
- excel - 在 VB.NET 中创建的 Excel 电子表格被锁定,无法删除
- hyperlink - 使用 DBpedia 获取 Wikipedia 页面的超链接
- swig - 找不到“javascript.swg”
- typescript - 如何在没有模块的情况下使用带有 vue 的 TypeScript
- javascript - 将单独的入口点脚本分配给单独的 HtmlWebpackPlugin 实例
- sql - 加入日期字段时的性能改进
- linux - Shell SQLPLUS 两次打印 CLOB 数据
- sql - 识别一列中存在但另一列中不存在的不同代码