gpt4 book ai didi

java - 读取 HTTPServletRequest 的 POST 主体,然后在 Tomcat 中调用 getParameter

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:07 27 4
gpt4 key购买 nike

我的应用程序需要检查 POST 请求的内容/数据/正文/有效负载而不更改后续 getParameter 调用的结果。

从输入流中读取正文:

可以使用 request.getInputStream 中的 InputStream 或 request.getReader 中的 BufferedReader 读取正文。

读取POST参数:

POST 请求通常在请求正文中包含请求参数。这些可以使用 getParameter 检索。

问题:

第一个 getParameter 调用在内部解析 inputStream 并将所有参数插入到参数 HashMap 中。它要求 inputStream 仍然包含要解析的内容。因此,无法在检查内容的同时调用有效的 getParameter。

建议的(但不充分)解决方案

创建一个缓存输入流并返回 getInputStream 缓存的请求包装器。

我在整个网络上看到了建议的解决方案,但它不起作用,因为 getParameter 实际上并没有调用 getInputStream,而是引用了原始的inputBuffer 埋在请求对象中。我已经从 Servlet 内部和使用过滤器尝试过了

我能想到的唯一解决方案涉及重写 getParameter 以实际手动解析缓存的输入流。但这感觉像是个坏主意。

有人有其他可行的替代方案吗? (这是 Tomcat 5.5)这感觉应该是一个常见的用例;我简直不敢相信这有多困难。

最佳答案

(这是一个相当旧的 tomcat,我假设升级到更现代的不是一个选项。)

您想要执行的操作将需要拦截包装底层 InputStream 的具体 HttpServletResponse 对象的构造。有必要将该 InputStream 包装在后推输入流(或等效输入流)中。

Tomcat 5.5 太旧了,我什至无法想象这将如何“正常”完成,但也许您可以编写一个过滤器,使用反射来访问并交换具体请求对象中的 InputStream 对象。

关于java - 读取 HTTPServletRequest 的 POST 主体,然后在 Tomcat 中调用 getParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18489399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com