【发布时间】:2011-09-17 23:48:18
【问题描述】:
我需要为一些不在 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 而不是业务方法。
【问题讨论】:
-
或许你可以使用 this() 或 args() 切入点。