我有一个使用Spring Security Core的Grails应用程序,运行在AWS机器后面的一个负载均衡器上。
负载均衡器解密SSL连接,并将请求转发到我们实例的8080端口,并添加适当的X-Forwarded-Proto头。
我希望任何对受保护页面的直接访问都能够使用https重定向到登录页面。
例如,请求https://myapp.com/private/page应该重定向到https://myapp.com/login/auth
我将以下内容放入我的config.groovy文件中:
grails.plugin.springsecurity.secureChannel.definition = [
'/login/**': 'REQUIRES_SECURE_CHANNEL'
]
但这会导致重定向循环(HTTP代码302)到http登录页面 (http://myapp.com/login/auth)
然后我尝试仅使用:
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.auth.forceHttps = true
但这会导致重定向(HTTP代码302)到http登录页面(http://myapp.com/login/auth)
- 该问题仅在生产设置中出现(war部署到负载均衡器后的Tomcat)。
- 如果我在本地开发机器上测试相同的config.groovy,则重定向到https://myapp.com/login/auth可以正常工作。
- 我尝试指定不同的httpsPort用于Spring安全性,同样在我的本地开发机器上有效,但在部署的应用程序中完全被忽略,仍然会重定向到http。
阅读了类似帖子后没有找到解决方法,有任何想法吗?