Spring Security - Grails 3.2.2 - ERR_TOO_MANY_REDIRECTS

时间:2017-10-04 08:05:31

标签: redirect grails spring-security controller

我在application.yml

上有这个
grails.plugin.springsecurity.successHandler.alwaysUseDefault = true
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/l/loggedIn'

l/loggedIn看起来像:

def loggedIn() {
    User user = springSecurityService.currentUser

    def roleDefault = Role.findByAuthority("ROLE_DEFAULT")
    if(user.authorities.contains(roleDefault))
        redirect(controller: 'foo', action:'index')

    def roleAdmin = Role.findByAuthority("ROLE_ADMIN")
    if(user.authorities.contains(roleAdmin))
        redirect(view: 'index')

}

当我在我的应用程序中以admin身份登录时,出现ERR_TOO_MANY_REDIRECTS错误。

有什么方法可以解决这个问题吗?

更新

@Secured(["ROLE_ADMIN", "ROLE_DEFAULT"])
class FooController {

    def index() {}
}

1 个答案:

答案 0 :(得分:1)

redirect不会将view带入帐户,render会这样做。

允许的选项包括actioncontrolleruriurlparamsfragment和/或域实例。

所以,你可以做点什么,

def loggedIn() {
    User user = springSecurityService.currentUser

    def roleDefault = Role.findByAuthority("ROLE_DEFAULT")
    if(user.authorities.contains(roleDefault))
        redirect(controller: 'foo', action:'index')

    def roleAdmin = Role.findByAuthority("ROLE_ADMIN")
    if(user.authorities.contains(roleAdmin))
        redirect(controller: 'foo', action:'adminIndex')
}

然后在你的控制器中定义两个actions,并提供适当的视图。

@Secured(["ROLE_ADMIN", "ROLE_DEFAULT"])
class FooController {

    def index() {}

    def adminIndex() {}

}

阅读docs