gpt4 book ai didi

java - Struts 和日志记录 HTTP POST 请求正文

转载 作者:行者123 更新时间:2023-11-28 22:15:08 25 4
gpt4 key购买 nike

我正在尝试在我们基于 Struts 的应用程序中记录 HTTP POST 请求的原始主体,在 Tomcat 6 上运行。我找到了一个 previous post所以这有点帮助,但在我的情况下,公认的解决方案不能正常工作。问题是,我只想在某些情况下记录 POST 正文, 让 Struts 在记录后从正文中解析参数。目前,在我编写的 Filter 中,我可以从 HttpServletRequestWrapper 对象读取并记录正文,但之后 Struts 找不到任何要解析的参数,因此 DispatchAction 调用(取决于请求中的参数之一)失败。

我深入研究了 Struts 和 Tomcat 的源代码,发现将 POST 正文存储到一个字节数组中并公开一个 Stream 和一个基于该数组的 Reader 并不重要;当需要解析参数时,Tomcat 的 Request 对象访问其内部的 InputStream,此时该 InputStream 已被读取。

有没有人知道如何正确实现这种日志记录?

最佳答案

事实上,Struts 并不解析参数,它依赖于Servlet 容器来解析。一旦容器读取了 inputStream 来创建参数 Map,当然就没有什么可读取的了。在 Tomcat 实现中,如果您先读取 inputStream,那么 getParameter* 系列方法就没有什么可做的了,因为正如您正确注意到的那样,它不使用 getInputStream 或 getReader,而是在内部访问其优化的阅读器。因此,您在 ServletRequestWrapper 中的唯一解决方案是覆盖 getInputStream、getReader 和 getParameter* 系列,Struts 依赖于这些系列来读取参数。也许您可以查看 org.apache.catalina.util.RequestUtil,以免重复 POST 正文解析部分。

关于java - Struts 和日志记录 HTTP POST 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448737/

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