Spring AOP, точки запускаются в соответствии с именем переменной пути
Я хотел бы, чтобы один из моих pointcut срабатывал в соответствии с тем, как я называю переменную пути в своем URL.
Дело в том, что это строка, и я не хочу, чтобы мой pointcut срабатывал на каждой строке.
@Pointcut("@annotation(security.annotation.RequireValidUser) && args(datasetName, ..)")
private void methodAnnotatedForValidDatasetName(String datasetName) {
}
В моем случае этот pointcut успешно запускается в этом методе (что нормально):
public ResponseEntity<ApiKeyDTO> createApiKey(@PathVariable("name") String datasetName, @RequestBody ApiKeyDTO apiKeyDTO)
Но это также срабатывает здесь (что я не хочу):
public ResponseEntity<List<ApiKeyDTO>> findApiKeyFromDatasetLabel(@PathVariable("label") String datasetLabel)
Интересно, есть ли какой-нибудь обходной путь для меня, чтобы pointcut мог различать разные строки по именованию?
РЕДАКТИРОВАТЬ: Как предложил @kuhajeyan, я попытался использовать "argNames" следующим образом:
@Pointcut(value = "@annotation(security.annotation.RequireValidUser) && args(datasetName, ..)", argNames = "datasetName")
К сожалению, он не работает как задумано, он только указывает имя аргументов внутри pointcut.
1 ответ
Вы можете использовать argName, задокументированный здесь
argNames
@Pointcut(value="@annotation(security.annotation.RequireValidUser) && args(name,..)", argNames="datasetName")
private void methodAnnotatedForValidDatasetName(String datasetName) {
}