У меня есть pointcut, который я пытаюсь использовать с LTW. У меня есть два метода, которые я пытаюсь посоветовать, каждый из которых имеет другой список параметров. Однако у них обоих есть один общий параметр, который я хочу.AspectJ pointcut matching arguments (args()) не подходит правильно
Эти сигнатуры методов я хочу посоветовать:
public static WorkflowModifierFlags authenticateUser(String username, String password, String ip, boolean webGUI, boolean realAuthentication)
public static boolean loginJAAS(HttpServletRequest request, HttpServletResponse response, String username, String password, HttpSession session)
Я попытался следующие с пересечениями/совет, но он терпит неудачу; переменная имени пользователя иногда получает инъекционный IP-адрес (т. е. args() из первого pointcut).
@Before("(execution(public static * business.security.service.LoginManagerHelper.authenticateUser(..)) && args(username, ..)) || "
+ "(execution(public static * webapp.util.LoginManagerAction.loginJAAS(..)) && args(*, *, username, ..))")
public void setUsername(JoinPoint jp, String username) {
// inject the username into the MDC
MDCUtils.setUsername(username);
}
я ожидал бы, что параметр args()
связан со способом исполнения(), но иногда это может показаться, что это «путать», и дает мне IP вместо имени пользователя.
Я неправильно использую AspectJ, или это ошибка в LTW? Я бегу AspectJ 1.6.13
Как подтвердил Энди Клемент в списке рассылки userj-user, это ошибка в AJ complier/weaver. Об ошибке сообщается на странице https://bugs.eclipse.org/bugs/show_bug.cgi?id=509235, чтобы узнать о проблеме. –
В качестве побочного примечания: готовы ли вы перейти на AspectJ 1.8.x? Наверное, Энди не собирается задерживать исправление устаревшей версии 1.6.х. Я действительно удивляюсь, почему вы используете 1.6.13. Есть ли причины, побуждающие вас сделать это? – kriegaex
@kriegaex Мне не удалось получить aspectj 1.8, работающий на моем контейнере jb4 с LTW. –