java - Spring - 在自定义注释中传递参数
问题描述
我有以下内容:
方面:
@Aspect
@Component
public class AuthorizeUserAspect {
@Autowired
PermissionService permissionService;
@Around("@annotation(AuthorizeUser)")
public Object authorize(ProceedingJoinPoint joinPoint) throws Throwable {
...
}
}
界面:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthorizeUser {
}
控制器:
@GetMapping("/businesses/{businessId}/test")
public ResponseEntity<List<BusinessDto>> getBusinessListAsClient(Principal jwtAuthUser, @PathVariable String businessId) throws Exception {
...
}
我需要从方法签名中传入命名参数,加上一个额外的自定义权限参数(READ / WRITE),所以像这样:
@AuthorizeUser(Principal jwtAuthUser, String businessId, permission = <Enum or String>)
@GetMapping("/businesses/{businessId}/test")
这可能吗?我真的不在乎它是如何完成的,只要我可以在我的授权函数中获取这些值来使用它们。
我知道我可以做类似的事情:
joinPoint.getArgs();
按位置获取参数,但我希望它更通用,并且某些控制器可以具有不同的参数,例如第一个和第二个,所以这不起作用,而且我不知道如何获得最后一个值。
注意:授权只是一个示例,但我也想对其他自定义注释参数执行此操作。
解决方案
也许您应该阅读 Spring AOP 手册。这个怎么样?
@Around("@annotation(authorizeUser)")
public Object authorize(ProceedingJoinPoint joinPoint, AuthorizeUser authorizeUser)
推荐阅读
- python - 我需要帮助将此 REST API Curl 命令转换为 Python 请求
- javascript - RequiredJS 加载 JS 文件失败
- .htaccess - 除少数文件和文件夹外,禁止将所有请求重定向到 403
- c# - 如何在 Windows 事件查看器中删除和创建日志
- sql - Oracle SQL 查询 Group By with having 子句
- python - 字节模式的正则表达式匹配会产生不寻常的结果 - '.' 不等于 [\x00-\xff]
- html - getBoundingClientRect() 为 Chrome 中的嵌套 SVG 返回错误值
- powershell - New-MailboxExportRequest Calander 文件夹-ContentFilter 日期问题
- sapui5 - 页面加载后 getBinding 不起作用
- python - Paramiko如何检测使用invoke_shell执行的命令是否已完成