Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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 Spring安全插件的无限重定向_Grails_Architecture_Spring Security - Fatal编程技术网

Grails Spring安全插件的无限重定向

Grails Spring安全插件的无限重定向,grails,architecture,spring-security,Grails,Architecture,Spring Security,我正在构建简单的Grails应用程序。为了安全,我使用了SpringSecurity插件和SpringSecurity用户界面。 我希望有三种类型的用户: 标准用户(客户端) 支持用户 管理用户 客户端将登录并发出一些请求,支持人员将收到这些请求并作出响应。管理员将负责管理用户权限和角色以及其他一些内容 所以基本上我有三个角色: 用户角色 角色与支持 角色管理 当用户登录时,他/她会根据用户角色在不同页面上重定向。我是按照他的建议做的 这很有效。但有时我会出现以下错误: Firefox

我正在构建简单的Grails应用程序。为了安全,我使用了SpringSecurity插件和SpringSecurity用户界面。 我希望有三种类型的用户:

  • 标准用户(客户端)
  • 支持用户
  • 管理用户
客户端将登录并发出一些请求,支持人员将收到这些请求并作出响应。管理员将负责管理用户权限和角色以及其他一些内容

所以基本上我有三个角色:

  • 用户角色
  • 角色与支持
  • 角色管理
当用户登录时,他/她会根据用户角色在不同页面上重定向。我是按照他的建议做的

这很有效。但有时我会出现以下错误:

Firefox检测到服务器正在以一种永远无法完成的方式重定向对此地址的请求。此问题有时可能是由于禁用或拒绝接受Cookie造成的

这是我的UrlMappings.groovy:

   class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?"{
            constraints {
                // apply constraints here

            }

        }

        "/"(controller:'login', action:'auth')
        "500"(view:'/error')

    }
}

什么是正确的方法?我是应该为每个角色创建不同的控制器,还是应该为每个角色创建一个RequestController(大多数工作都是通过request域类完成的),例如为每个角色指定不同的操作,例如userList、supportList、adminList等。

我对grails应用程序有类似的要求,但角色略有不同。我所做的是:

在UrlMappings.groovy中

"/"(controller: "home")
然后在我的HomeController中(这不完全是我的代码,但你明白了)


我猜当登录页面出现错误时,就会出现重定向问题。我会检查您是如何处理异常的,并确保它们不会试图重定向回导致再次出现错误的登录页面。

@Antoine感谢您的编辑。现在好多了。当你说有时,确切是什么时候?我的意思是,在某些情况下,你总能复制它吗?这些情况是什么?@omarello它工作正常,但当我做一些小改动时,它就进入了这个循环。我记不起确切的变化是什么。所以,在进一步研究之前,我将使用请求控制器的索引操作进行重定向。
def user

def index = {
    user = springSecurityService?.getAuthentication()?.details

    def role = user.getRole()
    if ('admin'.equals(role)) {
        redirect(view:'admin')
    } else if ('support'.equals(role)) {
        redirect(view:'support')
    } else {
        redirect(view:'home')
    }
}