Размещение рекомендаций по любому параметру заданного типа в AspectJ - PullRequest
1 голос
/ 16 мая 2009

Есть ли способ поставить совет по любому методу с параметром заданного типа. Я планирую использовать это для класса, который нуждается в фильтрации входных данных.

Как пример:

@Filtered
class Unsafe {
    public void doStuff (String input) { ... }

    public void doMoreStuff (String input, int value, String name) { ... }
}

Я хочу написать совет, применимый к любому строковому параметру методов этого класса, чтобы я мог заменить их содержимое безопасной, экранированной версией (для предотвращения, например, внедрения SQL).

Можно ли написать такой pointcut?

Ответы [ 2 ]

0 голосов
/ 17 июля 2013

По-моему, вам все еще нужно знать, существует ли шаблон для всех методов, которые используют SQL-запрос.

И тогда вы можете проверить аргументы метода в вашем совете:

Object around() : PATTERN_FOR_METHODS_THAT_TAKES_IN_SQL_STRING {
    Signature sig = thisJoinPointStaticPart.getSignature();
    Object[] args = thisJoinPoint.getArgs();
    //Check the type of each object in the args, and re-format String type object

    return proceed();// Continue with the current joint-point method
}

Заменить PATTERN_FOR_METHODS_THAT_TAKES_IN_SQL_STRING фактическим шаблоном

0 голосов
/ 16 мая 2009

Поскольку вы можете иметь более одной строки в разных местах, я не понимаю, как вы можете это сделать, но оба класса должны вызывать один и тот же метод, который будет записывать в базу данных. В этот момент вы можете использовать округление, чтобы изменить строку, чтобы сделать ее безопасной, и вместо этого передать ее.

...