场景如下:
在后台写了一个filter,拦截*.wx的请求,filter内逻辑忽略,最后response.sendRedirect(url)(这个url是相对地址),重定向到另一个页面。
问题来了:一个https的请求,最后经过这个filter重定向成了http协议。
如:请求:https://egis-cssp-dmzstg1.pingan.com.cn/m/1233.wx,重定向到了http://egis-cssp-dmzstg1.pingan.com.cn/m/client.html
正确结果是重定向到:https://egis-cssp-dmzstg1.pingan.com.cn/m/client.html
打印日志:request.getScheme()发现值是:http,即这个https的请求最后请求到后台服务器是http协议的。
通过浏览器的响应信息如下截图,也可看出最后服务器返回给浏览器的地址是http的。
问题分析结果:
https的配置是配置在负载均衡器上(F5),而分发到后台服务器上还是http协议。
解决方法:
使用response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); 这种方式重定向。
返回给浏览器的是相对地址,浏览器响应截图如下: