【发布时间】:2021-01-19 11:08:52
【问题描述】:
我想通过 Spring 过滤器或方面在 http 请求中记录请求参数。 我尝试了不同的方法,但请求参数为空或方法未被调用。 我正在使用 POSTMAN,它是一个 POST 请求
http://localhost:8080/AvailableData
示例请求正文:
{"keyUserAgent":"CFNetwork/1209 Darwin/20.2.0","locale":"en_US","eid":"8904977033","sessionId":"VGA-G20201030-776878787-1AD5-11EB- 895C-H78789GJJH"}
方法1:这里调用了 beforeRequest() 的“@Override”方法,但没有调用我创建的重载方法(我添加了@RequestBody 以按照其他解决方案获取正文)。
@Component
public class CustomLoggingFilter extends AbstractRequestLoggingFilter {
protected void beforeRequest(HttpServletRequest request, String message,@RequestBody RequestDTO requestBody) {
requestBody.getKeyUserAgent();
requestBody.getEid();
System.out.println("Eid: "+requestBody.getEid());
System.out.println("getKeyUserAgent: "+requestBody.getKeyUserAgent());
}
}
方法2:这里是null
@Aspect
@Component
@Order(1)
public class LogAspect {
private final static Logger logger = LoggerFactory.getLogger(LoggerAspect.class);
@Around("allControllerMethods() && args(..,@annotation(org.springframework...RequestBody) requestBody) ")
public Object controllerEvents(ProceedingJoinPoint jp, Object requestBody) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
MethodSignature signature = (MethodSignature) jp.getSignature();
Method method = signature.getMethod();
Object resObject = jp.proceed();
Object sessionId = attributes.getSessionId()
if (requestBody != null) {
String keyUserAgent = request.getParameter("keyUserAgent");
System.out.println("keyUserAgent : " + keyUserAgent);
}
return resObject;
}
【问题讨论】:
标签: java spring spring-boot