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。