我需要按原样将原始HTTP请求数据代理到另一个HTTP端点。
Spring MVC会变异该HttpServletRequest
实例,并request.getInputStream()
在我有机会在我的控制器方法中对其进行检查之前使用它,并且最终将其作为空流。
此外,Spring MVC仅在输入Content-Type
为时才将查询字符串参数与POST正文参数放在一起application/x-www-form-urlencoded
。为了正确的代理行为,必须不要这样做。代理的HTTP端点对维护单独的查询字符串和POST正文参数很敏感。
由于我不能依靠Spring MVC不会破坏传入的请求状态,因此我需要完全绕过MVC并注册一个独立Servlet
于我自己的地方,在这里我需要访问未经Spring修改的原始HTTP输入。
我的应用程序是作为WAR部署到Tomcat 8的Spring Boot(1.2.5)应用程序,并且具有static void main
在开发计算机上启动嵌入式Tomcat 8的能力。
如何创建一个独立的Servlet
代理来处理此代理逻辑?我试图ServletRegistrationBean
注册servlet,但这仍然使用Spring的默认过滤器破坏了传入的请求。我需要排除这些过滤器并重新开始。
通过禁用,我可以解决MVC消耗POST正文的最初问题HiddenHttpMethodFilter
。
@Bean
public FilterRegistrationBean hiddenHttpMethodFilterRegistration(HiddenHttpMethodFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setFilter(filter);
registration.setEnabled(false);
return registration;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句