我们目前正在使用AWS ELB - > Apache在运行Grails的Tomcat实例前面。我们使用Apache将http请求重定向到https请求。这对我们常规网站上的工作正常。尝试在Chrome上的iframe中嵌入我们的网站时,问题就出现了。 Chrome不喜欢重定向到http网页的https网站(即使该网页随后重定向到https)。发生这种情况的原因是,对于Spring Security来说,它看起来像是在http上,因为我们在负载均衡器后面。以下是开发者工具的网络乒乓球:
将同一页面放在Chrome上的iframe中时出现问题。
我们发现了许多解决方案,允许Spring Security Grails插件将http请求重定向到某些URL模式的https请求。 Here和here是其中两个示例。我们已经通过让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中运行应用程序?
答案 0 :(得分:3)
如果要修改SavedRequest
,那么您可以实现自己的SavedRequestAwareAuthenticationSuccessHandler
,当它将保存的请求从缓存中拉出并强制它为https时将覆盖协议。