我正在尝试在我们的基于 Struts 的应用程序中记录 HTTP POST 请求的原始正文,该应用程序在 Tomcat 6 上运行。我发现之前关于 SO 的一篇文章有些帮助,但接受的解决方案在我的应用程序中无法正常工作案子。问题是,我只想在某些情况下记录 POST 正文,并在记录后让 Struts 从正文中解析参数。目前,在我编写的过滤器中,我可以从 HttpServletRequestWrapper 对象读取和记录正文,但之后 Struts 找不到任何要解析的参数,因此 DispatchAction 调用(取决于请求中的参数之一)失败。
我对 Struts 和 Tomcat 源代码进行了一些挖掘,发现将 POST 主体存储到字节数组中并基于该数组公开 Stream 和 Reader 并不重要;当需要解析参数时,Tomcat 的 Request 对象会访问其内部的 InputStream,此时该 InputStream 已经被读取。
有谁知道如何正确实现这种日志记录?