Tomcat 8.5:必需的字符串参数“...”不存在

时间:2017-06-21 08:00:44

标签: java spring tomcat tomcat7 tomcat8

在从Tomcat 7.0.50升级到Tomcat 8.5.15期间,它停止识别我的一个方法的POST参数之一:我得到的不是正常响应就是这条消息

  

HTTP状态[400] - [错误请求]

     

输入状态报告

     

消息必需字符串参数'password'不存在

     

描述由于某些被认为是客户端错误的内容(例如,格式错误的请求语法,无效的请求消息框架或欺骗性请求路由),服务器无法或不会处理请求。 / p>      

Apache Tomcat / 8.5.15

方法签名是:

@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> login(
    @RequestParam("password") String passwordHash,
    @RequestParam("username") String loginName,
    @RequestParam(value = "clientId", required = false) String clientId,
    HttpServletRequest request,
    HttpServletResponse response)
    throws NoSuchAlgorithmException {//...

我已经从请求中捕获了流量,正如您所看到的,password POST参数包含在POST x-www-form-urlencoded参数中:

POST http://<masked>/Server/user/login HTTP/1.1
Host: <masked>
Connection: keep-alive
Content-Length: 270
Origin: http://<masked>
X-Requested-With: ShockwaveFlash/26.0.0.131
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Referer: http://<masked>
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,ru;q=0.6,he;q=0.4
Cookie: <masked>

noremember=true&password=C9TUq%2BYMIbeoW%2ByfoSCt9QJoOnmSGR8BqRKdOjufjE7%2FoHUDpPf3FHSvCUbZu4EBSKkJV2ryGs1Q77D7SFbBKZZ3joWcMTN6aTsgmPsOdW0Md1qcOkB4w4L3F53XZRlKUp2RaxCjoE0AIr%2B0WLomGFSrn8u8iTf2p4Z7Mo6ZKPA%3D&username=test%40example%2Ecom&clientId=1858390758%2E1481631908

奇怪的是,它在Tomcat 7下完美运行

这怎么能有所帮助?

1 个答案:

答案 0 :(得分:0)

最后找到了原因。 我在Tomcat 7.0.50的旧配置中maxPostSize="0"的{​​{1}}中有server.xml参数,我已将其复制到新配置,但自Tomcat 7.0.63版以来Connector并不意味着无限制,而是“空”,因此应使用maxPostSize="0"

  

maxPostSize的值为零的含义也是如此   更改为表示零限制而不是无限制以使其对齐   maxSavePostSize更直观。 (Markt的)

     

Tomcat 7.0.63 changelog