如何在AspectJ中获取HTTPServletRequest

时间:2011-09-17 23:48:19

标签: servlets aspectj

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

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
}

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

1 个答案:

答案 0 :(得分:0)

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

如果目标是将任何额外参数移除到myMethod,我首先想到的是创建一个RequestProcessor,将“有用”信息存储在{{} 1}},将由日志记录方面使用。