如何强制Spring Security在负载均衡器后面进行https重定向请求

时间:2015-02-26 15:59:07

标签: grails iframe spring-security load-balancing http-redirect

我们目前正在使用AWS ELB - > Apache在运行Grails的Tomcat实例前面。我们使用Apache将http请求重定向到https请求。这对我们常规网站上的工作正常。尝试在Chrome上的iframe中嵌入我们的网站时,问题就出现了。 Chrome不喜欢重定向到http网页的https网站(即使该网页随后重定向到https)。发生这种情况的原因是,对于Spring Security来说,它看起来像是在http上,因为我们在负载均衡器后面。以下是开发者工具的网络乒乓球:

enter image description here

将同一页面放在Chrome上的iframe中时出现问题。

enter image description here

我们发现了许多解决方案,允许Spring Security Grails插件将http请求重定向到某些URL模式的https请求。 Herehere是其中两个示例。我们已经通过让Apache拦截http请求并重定向到https来解决了这个问题。

问题是Chrome甚至不会在iframe中发出http请求。我们需要能够告诉Spring Security,即使您收到的saved request使用的是http,我们也需要您在完成身份验证后将其更改为https。

我们认为可能有效的一个解决方案是使用contextRelative而不是绝对URL更改为相对URL,由于ELB代理,Spring Security将其视为http。这个post似乎表明相同,但解决方案也没有改变将contextRelative更改为“true”时生成的URL。

我们如何告诉Grails Spring Security插件始终将URL格式化为相对或强制它们为https方案,以便我们可以在Chrome中的iframe中运行应用程序?

1 个答案:

答案 0 :(得分:3)

如果要修改SavedRequest,那么您可以实现自己的SavedRequestAwareAuthenticationSuccessHandler,当它将保存的请求从缓存中拉出并强制它为https时将覆盖协议。