由于重定向循环,Grails Spring Security 无法显示登录页面

标签 grails spring-security grails-2.0 grails-plugin

我已将当前的 spring 安全插件升级到

  • Spring 安全核心 2.0-RC2
  • spring-security-ui-1.0-RC1

  • 问题

    我注意到我的登录屏幕不再出现。在 Chrome 中它说 此页面有一个重定向循环

    重现问题的步骤

    因此,我尝试创建一个名为 Test 的全新应用程序来尝试隔离问题。

    首先,我通过在 中添加以下条目来安装 security 和 security-ui 插件。 BuildConfig.groovy :
    compile ":spring-security-core:2.0-RC2"    
    compile ":spring-security-ui:1.0-RC1"
    

    其次,我按如下方式运行了快速启动命令:
    grails s2-quickstart security Person Authority Requestmap
    

    它在名为 security 的包下创建了 4 个域对象,如下所示:Authority.groovy、Person.groovy、PersonAuthority.groovy 和 Requestmap.groovy

    并将以下内容添加到我的 配置.groovy
    // Added by the Spring Security Core plugin:
    grails.plugin.springsecurity.userLookup.userDomainClassName = 'security.Person'
    grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'security.PersonAuthority'
    grails.plugin.springsecurity.authority.className = 'security.Authority'
    grails.plugin.springsecurity.requestMap.className = 'security.Requestmap'
    grails.plugin.springsecurity.securityConfigType = 'Requestmap'
    grails.plugin.springsecurity.controllerAnnotations.staticRules = [
        '/':                              ['permitAll'],
        '/index':                         ['permitAll'],
        '/index.gsp':                     ['permitAll'],
        '/**/js/**':                      ['permitAll'],
        '/**/css/**':                     ['permitAll'],
        '/**/images/**':                  ['permitAll'],
        '/**/favicon.ico':                ['permitAll']
    ]
    

    最后,我通过执行 运行了该应用程序。 grails 运行应用程序 命令,我希望登录页面( auth.gsp )现在不再是您的代码的一部分,而是返回的插件(按设计)
    C\myPathToGrails\.grails\2.2.2\projects\Test\plugins\spring-security-core-2.0-RC2\grails-app\views\login\auth.gsp
    

    但相反,我得到一个空白页面,说明该页面有一个重定向循环。

    我还添加了以下静态规则,清理应用程序并再次重新运行它以查看它是否可以解决问题,但仍然出现重定向消息。
    '/login/**':                      ['permitAll'],
    '/login/auth/**':                 ['permitAll'],
    '/login.gsp':                     ['permitAll']
    

    有人知道如何解决这个问题吗?

    提前致谢。

    最佳答案

    您正在使用 请求图 作为安全配置类型,您的 controllerAnnotations.staticRules 没有任何效果。

    您需要在 中配置规则请求 map 表,并使您的登录 Controller 和公共(public)页面匿名可以访问,而无需登录,例如:

        new Requestmap(url: '/*', configAttribute: 'IS_AUTHENTICATED_ANONYMOUSLY').save();
        new Requestmap(url: '/logout/**', configAttribute: 'IS_AUTHENTICATED_REMEMBERED,IS_AUTHENTICATED_FULLY').save();
        new Requestmap(url: '/login/**', configAttribute: 'IS_AUTHENTICATED_ANONYMOUSLY').save()
        new Requestmap(url: '/index/**', configAttribute: 'IS_AUTHENTICATED_ANONYMOUSLY').save();
    

    关于由于重定向循环,Grails Spring Security 无法显示登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668999/

    相关文章:

    Java 或 Groovy CMS

    security - 自定义身份验证

    spring-security - Spring 拦截 url 模式

    java - Spring LDAP Authentication 的用户账户概念

    grails - Grails创建多个值(value)图

    Grails - 如何创建第二个公共(public)域 Controller

    grails - GRAILS 2.0异常:-java.lang.VerifyError:(class:xls/Recruitment,方法:initErrors signature:()V)无法将操作数从空堆栈中弹出

    grails - 具有相同URL值的Grails动态请求映射

    grails - Grails 3-f:table-如何显示相关类的属性

    java - 如何使Spring Web Flow中的 session 失效?