Как получить HTTPServletRequest в AspectJ - PullRequest
0 голосов
/ 18 сентября 2011

Мне нужно добавить несколько журналов аудита для некоторых бизнес-методов, которых нет на веб-уровне.Одним из требований является сохранение в этом журнале аудита пользователя, который выполнил бизнес-метод, и IP-адреса удаленного терминала.Я решил использовать AspectJ для аудита всех этих методов, чтобы избежать их заражения без использования делового кода.(Примечание: я не использую Spring, это старое веб-приложение Struts 1)

public void myMethod(Object param, HttpRequest request**){
     //Bussiness code that never use request param
}

@After("bla bla matches myMethod")
public void myAdvice(JoinPoint jp){
    Object request = (HttpServletRequest)jp.getArgs()[1];
    //bla bla using the request to get user and IP
}

Так что мой вопрос: есть ли у кого-нибудь какие-либо предложения для получения лучшего или изящного способа запроса сервлетаСовет?Фактически, myMethod не содержит кода Audit (это действительно хорошо), но теперь имеет второй параметр, который не используется непосредственно методом и может сбить с толку других разработчиков.Пожалуйста, не рекомендуйте мне советовать сервлету вместо бизнес-метода.

1 Ответ

0 голосов
/ 23 сентября 2011

Регистрация IP с myMethod уже связывает метод с веб-уровнем (или, по крайней мере, уровнем со значимым IP-адресом).HttpServletRequest, очевидно, не подходит, но реализация, предоставляющая «полезную» информацию о контексте вызова, будет иметь следующий вид:

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

...