java - AspectJ - 记录 HttpServletRequest

标签 java spring aspectj spring-aop

我想劫持 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是一个接口(interface)。每个 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 - 记录 HttpServletRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14283429/

相关文章:

jquery - Thymeleaf,将对象发送到ajax

java - 无法将 Spring 方面设置为最低顺序

java - 我的 Java 通用控制台输入法有改进吗?

java - Rails 应用程序中的 unicode 字符显示为 ???在mysql数据库中,

java - 如何在java中显示一个实例而不是显示三个实例?

java - 带注释参数的切入点匹配方法

spring - 类型/通用方面是否值得付出努力?

java - 无法居中 JButtons

JavaFx-表格 View : How to use custom Comparator<T> for sorting?

java - 尝试在 Spring Boot 中发送电子邮件时出现 NoSuchMethodError