java – AspectJ – 记录HttpServletRequest

我想劫持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) {
  //...
上一篇:java – aspectJ示例中的nullpointer异常


下一篇:spring – 找不到引用的切入点