【问题标题】:Programmatically log out a user以编程方式注销用户
【发布时间】:2012-06-15 01:11:25
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么不让这个没有角色的用户成为残疾人?

标签: grails spring-security


【解决方案1】:
class AnyController {    
    def logoutHandlers

    def method = {
    ...
        logoutHandlers.each { handler ->
            handler.logout(request, response, springSecurityService.authentication)
        }
    }
}

【讨论】:

  • 我会以requestresponse 传递什么?有什么 http 函数可以给我这些吗?
  • 没有。它们是每个控制器都可以访问的标准 HttpRequest 和 HttpResponse 对象
【解决方案2】:

顺便说一句,要注销当前登录的用户,您可以拨打以下电话:

SecurityContextHolder.clearContext()

【讨论】:

  • 在集成测试中非常有用
猜你喜欢
  • 2011-03-07
  • 2012-01-27
  • 2017-01-15
  • 1970-01-01
  • 2012-01-10
  • 2019-01-02
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
相关资源
最近更新 更多