簡體   English   中英

Spring - 在自定義注釋中傳遞參數

[英]Spring - Pass parameters in custom annotation

我有以下幾點:

方面:

@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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM