Grails和Spring Security:如何从控制器中获取经过身份验证的用户?

时间:2009-04-21 23:09:14

标签: grails

我最近从JSecurity插件迁移到了Spring Security。如何从我的控制器中获取经过身份验证的用户?

6 个答案:

答案 0 :(得分:15)

目前尚未记录,但在插件安装文件中,它为每个控制器添加了3种方法,因此您实际上不必注入authenticationService:

private void addControllerMethods(MetaClass mc) {
    mc.getAuthUserDomain = {
        def principal = SCH.context?.authentication?.principal
        if (principal != null && principal != 'anonymousUser') {
            return principal?.domainClass
        }

        return null
    }

    mc.getPrincipalInfo = {
        return SCH.context?.authentication?.principal
    }

    mc.isUserLogon = {
        def principal = SCH.context?.authentication?.principal
        return principal != null && principal != 'anonymousUser'
    }
}

这意味着您可以致电

principalInfo

获取主要对象。它还具有“isUserLogin”以查看用户是否已记录,并使用“authUserDomain”来获取与登录用户的主体关联的实际域类实例(人员/用户)。

答案 1 :(得分:13)

以下代码来自Spring Security Core Plugin (Version: 1.1.2) - Reference Documentation - Section 6.2

grails.plugins.springsecurity.SpringSecurityService提供安全实用程序功能。它是一个常规的Grails服务,所以你使用依赖注入将它注入到控制器,服务,taglib等中:

class SomeController {
    def springSecurityService
    def someAction = { 
        def user = springSecurityService.currentUser 
        …
    } 
}

答案 2 :(得分:10)

我正在使用0.5.1,以下内容适用于我:

class EventController {
  def authenticateService

  def list = { 
     def user = authenticateService.principal() 
     def username = user?.getUsername()
     .....
     .....
  } 
}

答案 3 :(得分:5)

如今,我认为这样做的方法是:

def user = getAuthenticatedUser()

答案 4 :(得分:2)

您也可以通过这种方式获得当前用户

 class AnyController {
  def springSecurityService
  def someAction = { 
    def user = User.get(springSecurityService.principal.id)

     } 
 }

答案 5 :(得分:0)

使用此代码:

if (springSecurityService.isLoggedIn()){   
        println "Logged In"

    }