首页 > 解决方案 > 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();

按位置获取参数,但我希望它更通用,并且某些控制器可以具有不同的参数,例如第一个和第二个,所以这不起作用,而且我不知道如何获得最后一个值。

注意:授权只是一个示例,但我也想对其他自定义注释参数执行此操作。

标签: javaspring-bootannotationsaop

解决方案


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

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

推荐阅读