gpt4 book ai didi

java - 记录 HttpRequest 参数和请求正文

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:57 25 4
gpt4 key购买 nike

我正在尝试为我的网络应用程序创建请求日志。我正在使用 Spring 3。0.

我实现了一个扩展 HandlerInterceptorAdapter 的类,并使用 preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 来拦截请求。

在方法中我希望能够记录请求主体(我的参数是直接写入请求主体的 XML 对象),为此我使用 request.getReader();

问题是 - 稍后当 spring Controller 尝试读取请求时,我将得到一个 IllegalStateException

有没有办法实现我的意图?

最佳答案

您可以使用过滤器来做到这一点。请求参数很容易处理。但是处理请求体会困难得多并且需要包装 servlet 请求,请参阅:HttpServletRequest .

您需要查看传入请求的大小,并决定是否要将请求正文存储为 tmp 文件或字符串。

您需要使用您的文件或保存的用于日志记录的字符串覆盖 ServetRequest.getInputStream()。

如果请求正文很大,我建议将输入流放入缓冲输入流中,然后读取正文的开头。

public class LogRequest extends HttpServletRequestWrapper {

public LogRequest(HttpServletRequest request) {
super(request);
}

@Override
public ServletInputStream getInputStream() throws IOException {
//read from tmp file or string.
}

@Override
public BufferedReader getReader() throws IOException {
//read from tmp file or string
}

}

关于java - 记录 HttpRequest 参数和请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com