Grails http url 使用 https
Grails http url to use https
我有一个在 amazon ec2 的 tomcat 上运行的应用程序。 http 和 https 都正常工作。我只想使用 https,这样当 http://app.com is accessed, it will be redirected to https://app.com.
在使用 spring 的 SpringSecurity 中,它有一个拦截器:
<sec:http auto-config='false'>
<sec:intercept-url pattern="/**" requires-channel="https"/>
</sec:http>
如何在 grails 中执行此操作?
我试过(和其他修改)
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.portMapper.httpPort = 8080
grails.plugin.springsecurity.portMapper.httpsPort = 8443
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'
grails.plugin.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.secureChannel.definition = [
'/**': 'REQUIRES_SECURE_CHANNEL'
]
但还是没有成功。
你没有配置 Grails 从 http 重定向到 https,但是你配置 tomcat 自动从 http 重定向到 https。
您需要对 tomcat 配置进行以下更改。
- 在 server.xml
中启用 https 连接器
- 修改 http 连接器以重定向到 https
Server.xml
<Connector port="80" enableLookups="false" redirectPort="443"/>
在你的web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
我现在通过删除第一个配置使其正常工作
grails.plugin.springsecurity.portMapper.httpPort = 8080
grails.plugin.springsecurity.portMapper.httpsPort = 8443
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'
grails.plugin.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.secureChannel.definition = [
'/**': 'REQUIRES_SECURE_CHANNEL'
]
并通过 grails run-app -https
在本地进行测试
对于开发服务器,我只是在配置中将 8080 替换为 80,将 8443 替换为 443。
我有一个在 amazon ec2 的 tomcat 上运行的应用程序。 http 和 https 都正常工作。我只想使用 https,这样当 http://app.com is accessed, it will be redirected to https://app.com.
在使用 spring 的 SpringSecurity 中,它有一个拦截器:
<sec:http auto-config='false'>
<sec:intercept-url pattern="/**" requires-channel="https"/>
</sec:http>
如何在 grails 中执行此操作?
我试过(和其他修改)
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.portMapper.httpPort = 8080
grails.plugin.springsecurity.portMapper.httpsPort = 8443
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'
grails.plugin.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.secureChannel.definition = [
'/**': 'REQUIRES_SECURE_CHANNEL'
]
但还是没有成功。
你没有配置 Grails 从 http 重定向到 https,但是你配置 tomcat 自动从 http 重定向到 https。
您需要对 tomcat 配置进行以下更改。
- 在 server.xml 中启用 https 连接器
- 修改 http 连接器以重定向到 https
Server.xml
<Connector port="80" enableLookups="false" redirectPort="443"/>
在你的web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
我现在通过删除第一个配置使其正常工作
grails.plugin.springsecurity.portMapper.httpPort = 8080
grails.plugin.springsecurity.portMapper.httpsPort = 8443
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'
grails.plugin.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.secureChannel.definition = [
'/**': 'REQUIRES_SECURE_CHANNEL'
]
并通过 grails run-app -https
对于开发服务器,我只是在配置中将 8080 替换为 80,将 8443 替换为 443。