以编程方式注销用户

zor*_*119 3 grails spring-security

用户登录后,我会检查他们的角色.如果他们没有角色,我想将其注销.这就是我现在正在做的事情:

if (SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')) {
    redirect(uri: '/book/edit')
}
else if (SpringSecurityUtils.ifAllGranted('ROLE_USER')) {
    redirect(uri: '/book/list')
}
else {
    redirect(uri: '/login/auth')
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为有递归重定向/login/auth.如何正确执行此操作(注销然后重定向到/login/auth)?

Igo*_*nov 9

顺便说一句,要注销当前登录的用户,您可以进行以下调用:

SecurityContextHolder.clearContext()
Run Code Online (Sandbox Code Playgroud)


小智 7

class AnyController {    
    def logoutHandlers

    def method = {
    ...
        logoutHandlers.each { handler ->
            handler.logout(request, response, springSecurityService.authentication)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)