Pau*_*ull 11 https grails redirect login spring-security
我有一个Grails应用程序使用在负载均衡器后面的AWS机器上运行的Spring Security Core.
负载均衡器解密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'
]
Run Code Online (Sandbox Code Playgroud)
但这导致重定向循环(HTTP代码302)到http登录页面(http://myapp.com/login/auth)
然后我尝试了:
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.auth.forceHttps = true
Run Code Online (Sandbox Code Playgroud)
但这导致重定向(HTTP代码302)到http登录页面(http://myapp.com/login/auth)
没有运气潜伏在类似的帖子,任何想法?
我还使用https和负载均衡器在AWS上使用Spring Security Core 2.0-RC4托管我的Grails应用程序,感谢spock99(上图)和AWS的Ravi L,我得到了它的工作.
我在config.groovy中做了以下事情:
// Required because user auth uses absolute redirects
grails.serverURL = "http://example.com"
grails.plugin.springsecurity.secureChannel.definition = [
'/assets/**': 'ANY_CHANNEL',// make js, css, images available to logged out pages
'/**': 'REQUIRES_SECURE_CHANNEL',
]
// overriding values in DefaultSecurityConfig.groovy from the SpringSecurityCore 2.0-RC4
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.portMapper.httpPort = 80
grails.plugin.springsecurity.portMapper.httpsPort = 443
Run Code Online (Sandbox Code Playgroud)
注意:Spring Security Core 2.0-RC4中不需要以下内容 - 它们已经在DefaultSecurityConfig.groovy中
secureHeaderName = 'X-Forwarded-Proto'
secureHeaderValue = 'http'
insecureHeaderName = 'X-Forwarded-Proto'
insecureHeaderValue = 'https'
Run Code Online (Sandbox Code Playgroud)
我得到了错误的'不健康'读数,因为点击'/'会返回302重定向到/ login/auth,所以我将一个health()方法添加到HomeController(我映射到'/ health')以供AWS点击:
class HomeController {
@Secured('IS_AUTHENTICATED_FULLY')
def index() { }
@Secured('permitAll')
def health() { render '' }
}
Run Code Online (Sandbox Code Playgroud)
关键是我在Load Balancer上运行多个实例时没有正确处理会话cookie(在将最小实例设置为2之前我没有发现这一点),所以为了让用户能够登录并保持登录状态,我在AWS上做了以下事情:
1. At Services / Elastic Beanstalk / Configuration / Load Balancing
a. set Application health check URL: /health
b. left Session Stickiness: unchecked
2. At Services / EC2 / Load Balancers / Description / Port Configuration:
For both port 80 (HTTP) and 443 (HTTPS)
1. Edit and select 'Enable Application Generated Cookie Stickiness'
2. Cookie Name: JSESSIONID
Run Code Online (Sandbox Code Playgroud)
我刚刚经历过同样的场景。被困在 https 上,然后是重定向,现在一切都很好。使用这些 Config.groovy 设置:
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.portMapper.httpPort = 80
grails.plugin.springsecurity.portMapper.httpsPort = 443
grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto'
grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto'
grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'
Run Code Online (Sandbox Code Playgroud)
请注意,对于那些不使用 springsecurity 2.0 的人,它是“插件”,而不是没有“s”的“插件”。
我的 beanstalk 负载均衡器设置如下所示(我安装了 SSL 证书,但没有显示):

在 EC2 负载均衡器设置中,确保您的侦听器设置正确:

最后,在 EC2 安全组中确保 EB 接受来自 ELB 的端口 80 和 443 请求:

请注意,在我的任何设置中,我都没有引用端口 8080 或 8443,即使这是我在本地主机上用于测试的端口。阅读本文的人可能会考虑尝试使用这些端口来解决问题。我的设置不需要这样。
| 归档时间: |
|
| 查看次数: |
4592 次 |
| 最近记录: |