使用Grails Spring Security插件进行无限重定向

时间:2011-12-07 14:39:57

标签: grails architecture spring-security

我正在构建简单的Grails应用程序。为了安全起见,我使用的是Spring Security插件和Spring Security UI。 我希望有三种类型的用户:

  • 标准用户(客户),
  • 支持用户
  • 管理用户

客户端将登录并发出一些请求,支持将获取这些请求并做出响应。管理员将负责管理用户权限和角色以及其他一些内容。

基本上我有三个角色:

  • ROLE_USER
  • ROLE_SUPPORT
  • ROLE_ADMIN

当用户登录时,他/她将根据用户角色重定向到不同的页面。我按照建议做了这个 link

这很有效。但有时我会得到以下错误:

  

Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。有时可能会因禁用或拒绝接受Cookie而导致此问题。

这是我的UrlMappings.groovy:

   class UrlMappings {

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

            }

        }

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

    }
}

对此有什么正确的方法?我应该为每个角色创建不同的控制器,还是应该创建一个RequestController(大部分工作都是使用请求域类完成的),例如为每个角色指定不同的操作 - 例如userList,supportList,adminList等。

1 个答案:

答案 0 :(得分:2)

我的grails应用程序有类似的要求,角色略有不同。我的工作如下:

在UrlMappings.groovy

"/"(controller: "home")

然后在我的HomeController中(这不是我的代码,但你明白了)

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')
    }
}

我的猜测是,当登录页面出现错误时,会发生重定向问题。我会检查你是如何处理异常的,并确保他们不会尝试重定向回登录页面,这会再次导致错误。