我的应用程序需要检查 POST 请求的内容/数据/正文/有效负载而不更改后续 getParameter 调用的结果。
从 inputStream 中读取正文:
可以使用 InputStream fromrequest.getInputStream
或 BufferedReader from读取正文request.getReader
。
读取 POST 参数:
POST 请求通常在请求正文中包含请求参数。这些可以使用检索getParameter
。
问题:
第一次getParameter
调用在内部解析 inputStream 并将所有参数插入到参数 HashMap 中。它要求 inputStream 仍然包含要解析的内容。因此,人们无法检查内容并且仍然可以进行有效的 getParameter 调用。
建议(但不充分)解决方案
创建一个请求包装器,用于缓存输入流并返回 getInputStream 的缓存。
我已经看到整个网络都建议了该解决方案,但它不起作用,因为getParameter
实际上并没有调用getInputStream
,而是指埋在请求对象中的原始 inputBuffer 。我已经尝试过了,无论是在 Servlet 内部还是使用过滤器
我能想到的唯一解决方案是重写 getParameter 以手动实际解析缓存的输入流。但这感觉是个坏主意。
有没有人有任何可行的替代方案?(这是Tomcat 5.5)这感觉应该是一个常见的用例;我不敢相信这有多么困难。