问题:
我使用Java HttpServeltResponse来调用sendRedirect,但在特定部署中,HTTP端口号不包含在HTTP 302响应消息中。
详细信息:
我有一个应用程序,它使用spring security来验证和重定向成功。我提供的重定向URL是一个相对路径。
在重定向上,spring框架在HttpServletResponse上调用sendRedirect,并在相关URL中传入上下文路径。例如:
HttpServletResponse.sendRedirect( “/ MyApp的/ index.html中”);
当我们在各种平台(Windows / Ubuntu等)上部署到tomcat实例时,这一切都正常。但是,我们的一个客户发现在他们的部署中,重定向端口被剥离,例如,如果入口点是:
http://server:8082/MyApp/authenticate
他们获得的重定向是:
http://server/MyApp/index.html
- 此页面不存在,因为它缺少端口8082
单步执行代码,我可以看到端口是通过询问Java Request Object来确定的,这似乎是由Web Application Container提供的(即Jetty / Tomcat?)。在我的开发环境中,它是org.eclipse.jetty.server.Request。
这是一个tomcat配置问题吗?我们可以使用Apache2 ProxyPassReverse复制相同的行为,但是他们向我保证他们没有运行Apache2,并且他们的连接是与tomcat的直接连接。
由于我无法在任何地方复制这个问题,我真的很难找到答案。非常感谢任何帮助。