java - 重写tomcat HTTP请求解析逻辑

标签 java tomcat

我有一些奇怪的问题: 当我们通过 POST 提交 html 表单时,我们所有的参数都转到请求正文,如果它是 GET 提交:参数转到 URL 中的 queryString。

但是我们不能停止,例如我们可以发送 POST,在正文中包含参数,在 URL 中包含 queryString。这是问题所在,tomcat 解析请求并生成 org.apache.coyote.Request 对象 - 来自 queryString 和 body 的所有参数都转到 ParameterMap,我无法检测到参数来自何处。我可以获取 queryString 并从中解析参数,但我无法检测到这个参数是否在主体中。

例子:

1)

<form method="POST" action="someUrl/?a=1&a=2">
    <input type="hidden" name="a" value="1"/>
    <input type="hidden" name="a" value="2"/>
...
</form>

参数映射将有两个值 1,2,但没有任何信息它们来自何处。

2)

<form method="POST" action="someUrl/?a=1&a=2">
...
</form>

参数映射也将有两个值 1,2,没有任何信息它们是否在正文中。

是否应该重写tomcat的请求解析逻辑、wrap request等?如果应该 - 我想我需要一本手册。任何想法,猜测。谢谢。

最佳答案

Tomcat 期望参数可以来自查询字符串或请求正文,因此它会将其合并,这样您就不必在两者中都进行搜索。

但是如果你真的想允许参数的非标准使用,你可以使用 request.getQueryString() 获取查询字符串(并解析它以找到请求字符串参数)。

并且可以单独用request.getReader()读取请求体,然后解析在body参数中查找。

ParameterMap 的使用有助于标准使用,但没有任何强制要求您实际使用它。

关于java - 重写tomcat HTTP请求解析逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989439/

相关文章:

java - 这个类是从哪里来的?

JavaFx,不在开头显示内容

java - 错误: cannot find symbol java for inner class

java - 更新到 Android Studio 3.2.1 后无法解决模块依赖关系

jquery - 如何根据角色隐藏 Web 应用程序用户的选项卡

tomcat - 尝试使用智能卡向 Tomcat 进行身份验证

java - Insert } to Complete ClassBody 错误,即使有匹配的大括号

java - 一次性将 Web 应用程序部署到 Apache Http 服务器和 Tomcat

jsp - 如何从另一台计算机访问Tomcat?

Tomcat 类路径