我希望根据我在 URL 中命名路径变量的方式来触发我的切入点之一。
事实是它是一个字符串,我不希望我的切入点在每个字符串上都被触发。
@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")
不幸的是,它没有按预期工作,它只指定了切入点内的参数名称。
最佳答案
您可以使用 argName ,已记录 here
argNames
@Pointcut(value="@annotation(security.annotation.RequireValidUser) && args(name,..)", argNames="datasetName")
private void methodAnnotatedForValidDatasetName(String datasetName) {
}
关于java - Spring AOP,切入点根据路径变量名触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39289997/