【发布时间】:2015-07-16 02:09:04
【问题描述】:
如何在过滤器级别修改请求消息正文。我们可以使用RequestWrapper 使用自定义消息更改消息正文吗?
【问题讨论】:
-
@TJ- - 这与此有何关系?我的意思是,您阅读了正文,但根本没有编辑。
如何在过滤器级别修改请求消息正文。我们可以使用RequestWrapper 使用自定义消息更改消息正文吗?
【问题讨论】:
简短的回答是肯定的。
但是,您并没有真正修改原始请求正文;相反,您可以从请求包装器返回不同的主体,而 servlet 将使用它。
至于怎么做,直接覆盖HttpServletRequestWrapper的getInputStream()方法,返回原InputStream的修改版即可。
为确保删除原始正文的任何痕迹,您可能还需要覆盖getReader()。当要求读者时,标准实现会在您的InputStream 上返回一些BufferedReader,但是
有一些模拟实现(比如 spring-test 中的那个)。
【讨论】:
getInputStream()(和getReader(),这样你就不会依赖底层的HttpServletRequest实现行为)。