【发布时间】:2014-08-22 19:33:42
【问题描述】:
我有一个在 Tomcat 上运行的带有 Spring Security 过滤器的 Web 应用程序。该应用程序部署在内部网络上,并且仅接受来自该网络内的传入连接。假设这是机器srv_host。
同一网络中的另一台机器 lb_host 托管负载平衡器 (HAProxy)。它接受来自外界的 HTTPS 连接并终止 SSL 连接。然后,它通过纯 HTTP 将调用重定向到 srv_host 上的 Web 应用程序。
srv_host 上的 Spring Security 过滤器检查身份验证令牌。如果不存在,它会存储原始请求的 URL,然后重定向到登录页面。登录成功后,它会使用存储的 URL 重定向回请求的页面。
问题是存储的 URL 是 http://srv_host/... 而不是 https://lb_host/...。然后所有未来的调用都开始通过 HTTP 而不是 HTTPS。
有没有办法在负载均衡器工作之前提取原始 URL?我尝试访问 X-Forwarded-For 标头,但未设置。设置此标头是否需要任何特定配置?另外,是否有任何 Spring Security 设置可以自动处理所有这些?
注意:我找到了问题Offloading https to load balancers with Spring Security,但我完全看不懂步骤。非常欢迎提供更多细节和/或步骤。
如果需要任何其他详细信息,请告诉我。
【问题讨论】:
标签: spring-security load-balancing