Что такое декларативный синтаксис AspectJ для перезаписи аргумента - PullRequest
2 голосов
/ 30 января 2011

На этот вопрос уже был дан ответ с синтаксисом аннотации: 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 ]

6 голосов
/ 30 января 2011

Я получил рабочую версию аннотации:

@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 будет работать.

0 голосов
/ 30 января 2011

return thisJoinPoint.proceed(args); делает то, что вы хотите?

...