我的应用程序需要检查 POST 请求的内容/数据/正文/有效负载,而不更改后续 getParameter 调用的结果。
从输入流中读取正文:
可以使用 InputStream 读取正文request.getInputStream
或 BufferedReader 来自request.getReader
.
读取POST参数:
POST 请求通常在请求正文中包含请求参数。这些可以使用检索getParameter
.
问题:
首先getParameter
call 内部解析 inputStream 并将所有参数插入到参数 HashMap 中。它要求 inputStream 仍然包含用于解析的内容。因此,无法检查内容并仍然可以进行有效的 getParameter 调用。
提议的(但不充分)解决方案
创建一个请求包装器来缓存输入流并返回 getInputStream 的缓存。
我在网上看到了建议的解决方案,但它不起作用,因为getParameter
实际上并没有打电话getInputStream
,而是指埋在请求对象中的原始inputBuffer。我已经尝试过,无论是从 Servlet 内部还是使用过滤器
我能想到的唯一解决方案是重写 getParameter 以实际手动解析缓存的输入流。但这感觉是个坏主意。
有人有任何可行的替代方案吗? (这是 Tomcat 5.5)这感觉应该是一个常见的用例;我不敢相信这有多困难。
(这是一个相当旧的 tomcat,我假设升级到更现代的 tomcat 不是一种选择。)
您想要做的将需要拦截包装底层 InputStream 的具体 HttpServletResponse 对象的构造。将该 InputStream 包装在推回输入流(或等效流)中是必要的。
Tomcat 5.5 太老了,我什至无法想象如何“正常”完成这一点,但也许您可以编写一个过滤器,使用反射来访问并交换具体请求对象内的 InputStream 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)