Servlets 如何在AspectJ中获取HTTPServletRequest

Servlets 如何在AspectJ中获取HTTPServletRequest,servlets,aspectj,Servlets,Aspectj,我需要向不在web层中的某些业务方法添加一些审核日志。其中一个要求是将执行业务方法的用户和远程终端的IP存储在此审核日志中。我决定使用AspectJ来审核所有这些方法,以避免在没有业务代码的情况下污染它们。(注意:我没有使用Spring,这是一个旧的Struts 1 Web应用程序) 所以我的问题是,是否有人建议以更好或优雅的方式获得建议中的Servlet请求?事实上,myMethod不包含审计代码(这真的很好),但现在有了第二个参数,该参数不是该方法直接使用的,可能会让其他开发人员感到困惑。请

我需要向不在web层中的某些业务方法添加一些审核日志。其中一个要求是将执行业务方法的用户和远程终端的IP存储在此审核日志中。我决定使用AspectJ来审核所有这些方法,以避免在没有业务代码的情况下污染它们。(注意:我没有使用Spring,这是一个旧的Struts 1 Web应用程序)


所以我的问题是,是否有人建议以更好或优雅的方式获得建议中的Servlet请求?事实上,myMethod不包含审计代码(这真的很好),但现在有了第二个参数,该参数不是该方法直接使用的,可能会让其他开发人员感到困惑。请不要建议我将业务方法告知Servlet。

myMethod
记录IP已经将该方法绑定到web层(或者至少是具有有意义的IP地址的层)。一个
HttpServletRequest
显然是不合适的,但是一个提供关于调用上下文的“有用”信息的实现是不合适的


如果目标是删除
myMethod
的任何额外参数,我的第一个想法是创建一个
RequestProcessor
,它将“有用”的信息存储在
ThreadLocal
中,这将由日志方面使用。

可能您可以使用this()或args()切入点。这正是我想要的。就像你说的,我不能将日志与webtier解耦,但我不想将业务逻辑与webtier绑定。塔克斯!
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
}