我们需要一个HttpRequestWrapper,它能够缓冲POST / PUT请求体,以便我们可以在日志消息中打印它。标准的HttpServletRequest不允许我们缓存正文:如果你读了一次,它就消失了,因为它是一个流。 我们创建了简单的包装类,它读取主体,将其存储为String,并覆盖getReader()/ getInputStream()方法,以便它们从该String读取主体。 但是,现在我们发现它在调用getParameter *()方法时不起作用(它们总是返回null / empty) - 可能是因为这些方法被委托给包装的原始请求,它不知道缓冲体,并且它试图读取已经消失的原始流。
因此,我们可能需要覆盖POST请求中的所有与参数相关的方法(getParameter,getParameterMaps等) - 可能我们必须手动解析主体并检索参数,这听起来不是一件容易的事。我们需要在生产环境中使用它,所以我宁愿找到一些现有的防弹代码,而不是发明我们自己的代码。
但奇怪的是,我找不到提供这类课程的图书馆。谁能指点我这样的图书馆?您是否已在公共,生产环境中使用此类代码?
我还看过一些内部的Tomcat类,它们的名字很有前途,比如“BufferedInputFilter”(http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/coyote/http11/filters /BufferedInputFilter.html) - 但是这个过滤器没有实现标准的ServletFilter,所以我不知道我是否可以使用它以及如何使用它。