Spring - 在自定义注释中传递参数

Posted

技术标签:

【中文标题】Spring - 在自定义注释中传递参数【英文标题】:Spring - Pass parameters in custom annotation 【发布时间】:2021-12-06 15:36:49 【问题描述】:

我有以下几点:

方面:

@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 Security的@PreAuthorize expression can invoke a method on a bean吗? 请反馈。不要只是问问题,然后不对答案或评论做出反应,这不是很有礼貌。谢谢。 这能回答你的问题吗? How to get parameter of custom annotation by aspect? 【参考方案1】:

也许您应该阅读 Spring AOP 手册。这个怎么样?

@Around("@annotation(authorizeUser)")
public Object authorize(ProceedingJoinPoint joinPoint, AuthorizeUser authorizeUser)

【讨论】:

以上是关于Spring - 在自定义注释中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

异常“已传递主参数'webdriver'但未定义主参数创建注释时出错

如何给用户控件传递参数

如何在自定义 cmdlet 中正确使用 -verbose 和 -debug 参数

Flink 如何解析与传递参数

Flink 如何解析与传递参数

调用spring restful接口怎样传递字符数组参数