有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

自定义注释中的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 {
      ...
  }

我需要从方法签名中传入命名参数,再加上一个额外的自定义权限参数(读/写),所以类似这样:

  @AuthorizeUser(Principal jwtAuthUser, String businessId, permission = <Enum or String>)
  @GetMapping("/businesses/{businessId}/test")

这可能吗?我真的不在乎它是如何完成的,只要我能在我的authorize函数中获得这些值来使用它们

我知道我可以做一些事情,比如:

joinPoint.getArgs();

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

注意:authorize只是一个示例,但我也希望对其他自定义注释参数执行此操作


共 (1) 个答案

  1. # 1 楼答案

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

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