去年围绕同一主题有几个问题:
Grails application on Heroku with ssl
grails - spring-security-core secure-channel causing redirect loop (on Heroku)
grails - simple App to test spring-security-core secure-channel on Heroku
但当时似乎没有出现令人满意的答案。
我在 heroku 上运行 2.24 Grails 应用程序,使用 Spring 安全插件 (1.2.7.3)。
尝试使用:
grails.plugins.springsecurity.secureChannel.definition = [
'/myAccount/**': 'REQUIRES_SECURE_CHANNEL',
]
导致该 url 映射发生重定向循环。
我的 Coonfig.groovy 包含:
grails.plugins.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true#
在上面链接的其中一个问题中,Burt 提到了
grails.plugins.springsecurity.portMapper.httpPort
grails.plugins.springsecurity.portMapper.httpPort
可能需要更改,但我无法在任何地方找到任何文档来建议 Heroku 应该使用哪些端口 - 我已经尝试使用 80 用于 http 和 443 用于 https,但遇到了同样的问题。
有没有人在任何时候成功地让这个工作?
最佳答案
看起来这是因为 Spring Security 插件在
时对 'x-forwarded-proto' 使用了错误的大小写 grails.plugins.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
已设置。
将它添加到我的 config.groovy 中解决了这个问题
grails.plugins.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugins.springsecurity.portMapper.httpPort = 80
grails.plugins.springsecurity.portMapper.httpsPort = 443
grails.plugins.springsecurity.secureChannel.secureHeaderName = 'X-FORWARDED-PROTO'
grails.plugins.springsecurity.secureChannel.secureHeaderValue = 'http'
grails.plugins.springsecurity.secureChannel.insecureHeaderName = 'X-FORWARDED-PROTO'
grails.plugins.springsecurity.secureChannel.insecureHeaderValue = 'https'
关于Heroku 上的 Grails - spring 安全核心 secureChannel.definition 导致重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19678122/