Что такое декларативный синтаксис AspectJ для перезаписи аргумента
На этот вопрос ранее был получен синтаксис аннотации: Aspectj перезаписывает аргумент метода
Но я не могу понять, как это сделать с помощью декларативного синтаксиса AspectJ. Далее следует добавить "Poop" перед каждой строкой в методе, но это не так.
public aspect UserInputSanitizerAdvisor {
pointcut unSafeString() : execution(@RequestMapping * * (..));
Object around() : unSafeString() {
//thisJoinPoint.getArgs();
//proceed();
System.out.println("I'm Around");
Object[] args = thisJoinPoint.getArgs();
if (args != null) {
for (int i = 0; i < args.length; i++) {
Object o = args[i];
if (o != null && o instanceof String) {
String s = (String) o;
args[i] = "poop: " + s;
}
}
}
return proceed();
}
}
Я не могу понять, как дать "continue ()" все аргументы.
2 ответа
Решение
Я получил рабочую версию аннотации:
@SuppressWarnings("unused")
@Aspect
public class UserInputSanitizerAdivsor {
@Around("execution(@RequestMapping * * (..))")
public Object check(final ProceedingJoinPoint jp) throws Throwable {
Object[] args = jp.getArgs();
if (args != null) {
for (int i = 0; i < args.length; i++) {
Object o = args[i];
if (o != null && o instanceof String) {
String s = (String) o;
args[i] = UserInputSanitizer.sanitize(s);
}
}
}
return jp.proceed(args);
}
}
Теперь у меня есть XSS-защита для всех моих контроллеров Spring MVC. Я надеялся заставить работать синтаксис aspectJ.
Есть ли return thisJoinPoint.proceed(args);
делай что хочешь?