Spring AOP,根据路径变量名触发切入点

时间:2016-09-02 10:17:33

标签: java spring aop pointcut

我想根据我在URL中命名路径变量的方式触发我的切入点之一。

事实是它是一个String,我不希望在每个String上触发我的切入点。

@Pointcut("@annotation(security.annotation.RequireValidUser) && args(datasetName, ..)")
private void methodAnnotatedForValidDatasetName(String datasetName) {
}

在我的情况下,在这个方法中成功触发了这个切入点(这没关系):

public ResponseEntity<ApiKeyDTO> createApiKey(@PathVariable("name") String datasetName, @RequestBody ApiKeyDTO apiKeyDTO)

但是这里也是触发(我不想要):

public ResponseEntity<List<ApiKeyDTO>> findApiKeyFromDatasetLabel(@PathVariable("label") String datasetLabel)

我想知道是否有任何解决方法对我来说,切入点可以区分不同的字符串与他们的命名可能吗?

编辑:根据@kuhajeyan的建议,我尝试使用'argNames',如下所示:

@Pointcut(value = "@annotation(security.annotation.RequireValidUser) && args(datasetName, ..)", argNames = "datasetName")

不幸的是,它不能像预期的那样工作,它只指定切入点内的参数名称。

1 个答案:

答案 0 :(得分:3)

您可以使用argName,已记录here

  

argNames

@Pointcut(value="@annotation(security.annotation.RequireValidUser) && args(name,..)",  argNames="datasetName")
private void methodAnnotatedForValidDatasetName(String datasetName) {
}