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

Sco*_*ott 5 iframe grails load-balancing spring-security http-redirect

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

在此处输入图片说明

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

在此处输入图片说明

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

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

我们认为可能可行的一种解决方案是使用contextRelative而不是绝对URL更改为相对URL,由于ELB代理,Spring Security将其视为http。这篇文章似乎暗示了相同的观点,但是该解决方案也没有更改将contextRelative更改为“ true”时生成的URL。

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

Phu*_*ong 4

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