最近在玩 mitre HTTP-Proxy-Servlet 。 最开始在网上找的例子是 jetty 容器的。代理转发post么有问题。
集成到 springboot 里后,发现 get 方法OK, post方法老是等待中,并且最后 timeout.
邪门了,找了半天原因没找到。 然后又重新运行 jetty的例子,发现一切ok, 这就说明不是 proxy源码的锅,是springboot的。
然后看 proxy github的说明,发现了类似的备注蛛丝马迹。(在springboot或者springMVC框架里,post表单 会提前消费,也就是优先级执行大于新加的proxyservlet)
然后看issue看了半天
https://github.com/mitre/HTTP-Proxy-Servlet/issues/83 [POST will hang at execute]
最后找到这个人的回复,应该是说明上对应的 disabling FilterRegistrationBean. 。(其实应该写 disable HiddenHttpMethodFilter 更好理解! )
@Bean public FilterRegistrationBean registration(HiddenHttpMethodFilter filter) { FilterRegistrationBean registration = new FilterRegistrationBean(filter); registration.setEnabled(false); return registration; }
至此,解决问题。感谢开源!
https://stackoverflow.com/questions/8522568/why-is-httpservletrequest-inputstream-empty
提前消费的原因应该是这个spring的源码。