我想劫持HTTPServletRequest并使用AspectJ从它中记录一些值.但是,JoinPoint中的最终结果是“RequestFacade”对象.我可以用这个对象做很多事情.我的记录策略是错的吗?如何从HttpServletRequest获取有用的信息?如果我必须在调用方法之前解开它,那么这种方法在我的应用程序中就失去了AOP的目的.
我正在使用Glassfish服务器,如果这有所作为.
@Before("execution(* Service.testAuditRecord(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("logBefore --->" + joinPoint.getSignature().getName());
System.out.println("logBefore--->Args : " + Arrays.toString(joinPoint.getArgs()));
}
RequestFacade记录
INFO: logBefore --->testAuditRecord
INFO: logBefore--->Args : [org.apache.catalina.connector.RequestFacade@4dbfa7d0]
解决方法:
HttpServletRequest
是一个界面.每个servlet容器都有自己的实现. org.apache.catalina.connector.RequestFacade就是其中之一.
也就是说,您可以*使用HttpServletRequest的任何方法,而无需担心实际的实现.
Service.testAuditRecord()的签名是什么?是否需要HttpServletRequest作为参数?如果是这样,AspectJ应该给你一个强类型的实例,没有太多的麻烦.试试这个:
@Before("execution(* Service.testAuditRecord(..)) && args(request)")
public void logBefore(JoinPoint joinPoint, HttpServletRequest request) {
//...