【问题标题】:Grails channel security causing a redirect loopGrails 通道安全导致重定向循环
【发布时间】:2016-05-12 23:12:20
【问题描述】:

我是 Grails 的新手,我正在开发一个现有的应用程序。我试图强迫使用我们网站的任何人始终使用 https。我添加了 Spring Security Core 插件

//BuildConfig.groovy
compile "org.grails.plugins:spring-security-core:2.0.0"

我刚刚添加了

///Config.groovy
grails.plugin.springsecurity.secureChannel.definition = [
    '/**': 'REQUIRES_SECURE_CHANNEL'

当我尝试访问 localhost:8080/myapp 时,它会将我重定向到 https://localhost:8443/myapp,但我收到“此网页有重定向循环 ERR_TOO_MANY_REDIRECTS”消息。

我在我的 SecurityFilters.groovy 中添加了打印语句,我可以看到无限循环正在运行

baseFilter(controller: "*", action: "*") 
    {
        before = {  
            println "baseFilter"
            // If auth controller then ok to continue
            if (controllerName.equals("auth"))
            {
                return true;
            }

            // If no subject (user) and not auth controller then user must authenticate
            if (!session.subject && !(controllerName.equals("auth")))
            {
              params.targetUri = request.forwardURI - request.contextPath
              if (params.action=="profile") {
                params.targetUri=params.targetUri + "?page=" + params?.page
              }
              else if (params.action=="results") {
                params.targetUri="/home"
              }
              println "baseFilter: Redirecting: PARAMS = $params"
              redirect(controller:'auth', action:'login', params: params)
              return false;
            }
        }
    }

只是:

baseFilter
baseFilter: Redirecting: PARAMS = [action:auth, format:null,  controller:login, targetUri:/login/auth]

一遍又一遍。

我尝试了许多其他在 Stackoverflow 和其他网站上找到的东西,但它们要么不起作用,要么太复杂。

谢谢。

【问题讨论】:

  • 检查您的grails.serverURL 设置。确保在您的 Config.groovy 中设置为使用 https
  • 没有 grails.serverURL 设置。我添加了 grails.serverURL = "https://localhost:8443/myapp",但仍然出现同样的错误。
  • 您是否在 https 上运行应用程序?
  • 尝试在 dev grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = false 中使用此设置
  • @allthenutsandbolts 我使用 -https 参数运行。我尝试了 useHeaderCheckChannelSecurity 设置,但我仍然收到重定向错误。

标签: grails spring-security https grails-plugin redirect-loop


【解决方案1】:

好的,所以这不是问题的答案,但我设法实现了我想要做的事情,即强制 SLL,并重定向任何使用 http 的尝试。我通过使用我的应用程序已经使用的 shiro 插件来做到这一点。在 Buildconfig.groovy 中,只需将 compile ":shiro:1.2.1" 添加到您的插件中。在 config.groovy 我添加了以下属性:

security { 
    shiro { 
        filter { 
            loginUrl = "/login" 
            successUrl = "/" 
            unauthorizedUrl = "/unauthorized" 
            filterChainDefinitions = """
                                     /** = ssl[443]
                                     """ 
        } 
    } 
}

您可以修改您的 filterChainDefinitions 以仅在某些 url 上强制使用 ssl。我只是使用 /** 因为我总是想要 SSL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多