Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails通道安全性导致重定向循环_Grails_Spring Security_Https_Grails Plugin_Redirect Loop - Fatal编程技术网

Grails通道安全性导致重定向循环

Grails通道安全性导致重定向循环,grails,spring-security,https,grails-plugin,redirect-loop,Grails,Spring Security,Https,Grails Plugin,Redirect Loop,我是Grails新手,正在开发一个现有的应用程序。我试图强迫所有使用我们网站的人都使用https。我添加了Spring安全核心插件 //BuildConfig.groovy compile "org.grails.plugins:spring-security-core:2.0.0" 我只是补充说 ///Config.groovy grails.plugin.springsecurity.secureChannel.definition = [ '/**': 'REQUIRES_SEC

我是Grails新手,正在开发一个现有的应用程序。我试图强迫所有使用我们网站的人都使用https。我添加了Spring安全核心插件

//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时,它会将我重定向到,但我收到一条“此网页有重定向循环ERR\u TOO\u MANY\u redirects”消息

我在SecurityFilters.groovy中添加了print语句,可以看到无限循环正在进行

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和其他网站上找到的许多其他东西,但它们要么不起作用,要么太复杂


谢谢。

好的,这不是问题的答案,但我成功地实现了我想要做的,那就是强制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。

检查您的
grails.serverURL
设置。确保在
Config.groovy
中设置为使用
https
,并且没有grails.serverURL设置。我添加了grails.serverURL=“”,但仍然出现相同的错误。您是否在https上运行应用程序?尝试在dev grails.plugin.springsecurity.secureChannel.UseHeaderCheckChannel Security=false@allthenutsandbolts我正在使用-https参数运行。我尝试了UseHeaderCheckChannel安全设置,但仍然出现重定向错误。