LTW에서 사용하려고하는 pointcut이 있습니다. 나는 각각 다른 매개 변수 목록을 가지고 조언하려고하는 두 가지 방법을 가지고있다. 그러나 둘 다 원하는 공통 매개 변수가 하나뿐입니다.AspectJ 포인트 컷 일치 인수 (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 주소가 주입되기도합니다 (예 : 첫 번째 pointcut에서 args()).
@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을 실행 중이다.
aspectj-user 메일 링리스트에서 Andy Clement가 확인한대로 이것은 AJ 작성자/작성자의 버그입니다. 문제를 추적하기 위해 https://bugs.eclipse.org/bugs/show_bug.cgi?id=509235에 버그가보고되었습니다. –
사이드 노트 : AspectJ 1.8.x로 업그레이드 할 준비가 되셨습니까? Andy는 오래된 1.6.x 버전으로 수정 사항을 백 포팅하지 않을 것입니다. 왜 1.6.13을 사용하는지 궁금합니다. 이 일을하도록 강요하는 이유가 있습니까? – kriegaex
@kriegaex LTW가있는 jb4 컨테이너에서 aspect1 1.8을 사용할 수 없습니다. –