重写tomcat HTTP请求解析逻辑

时间:2016-06-23 10:47:11

标签: java tomcat

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

但我们无法停止,例如我们可以发送带有params的POST和URL中的queryString。这是问题,tomcat解析请求和make org.apache.coyote.Request对象 - 来自queryString和body的所有参数都转到ParameterMap,我无法检测参数的来源。我可以从中获取queryString并解析params,但我无法检测到这个参数是否在体内。

示例:

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的请求解析逻辑,包装请求等吗?如果应该 - 我想我需要一本手册。任何想法,猜测。谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

您可以使用request.getReader()单独阅读请求正文,然后解析它以查找正文参数。

使用ParameterMap是标准用途的帮助,但没有任何东西强迫你实际使用它。