我有一个在Tomcat上运行Spring Security过滤器的Web应用程序。该应用程序部署在内部网络上,仅接受来自此网络的传入连接。假设这是机器srv_host
。
同一网络中的另一台计算机lb_host
托管负载均衡器(HAProxy)。它接受来自外部世界的HTTPS连接并终止SSL连接。然后,它通过普通HTTP将呼叫重定向到srv_host
上的Web应用程序。
srv_host
上的Spring Security过滤器检查身份验证令牌。如果不存在,它会存储原始请求的URL,然后重定向到登录页面。登录成功后,它会使用存储的URL重定向回所请求的页面。
问题是存储的网址是http://srv_host/...
而不是https://lb_host/...
。然后所有未来的呼叫都将开始通过HTTP而不是HTTPS。
有没有办法在负载均衡器工作之前提取原始URL?我尝试访问X-Forwarded-For
标头,但未设置。是否需要设置此标头的任何特定配置?此外,是否有任何Spring Security设置可以自动处理所有这些?
注意:我发现了问题Offloading https to load balancers with Spring Security,但我根本无法理解这些步骤。更多细节和/或步骤将非常受欢迎。
如果需要任何其他详细信息,请与我们联系。
答案 0 :(得分:2)
您可以使用“option forwardfor”在haproxy中设置标头。 我指出你的Haproxy 1.5文档,因为你暗示它终止了SSL,自v1.5起支持SSL。 http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2-option%20forwardfor