Grails и Spring Security: как получить аутентифицированного пользователя из контроллера? - PullRequest
12 голосов
/ 22 апреля 2009

Я недавно перешел с плагина JSecurity на Spring Security. Как получить аутентифицированного пользователя из моих контроллеров?

Ответы [ 6 ]

15 голосов
/ 22 апреля 2009

В настоящее время это не задокументировано, но в установочном файле плагина есть 3 метода, которые он добавляет к каждому контроллеру, чтобы вам на самом деле не приходилось вставлять аутентификационный сервис:

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», чтобы получить фактический экземпляр класса домена (Person / User), связанный с принципалом вошедшего в систему пользователя.

13 голосов
/ 07 июня 2011

Следующий код взят из Spring Security Core Plugin (Версия: 1.1.2) - Справочная документация - Раздел 6.2

grails.plugins.springsecurity.SpringSecurityService обеспечивает функции утилит безопасности. Это обычный сервис Grails, поэтому вы используете внедрение зависимостей, чтобы внедрить его в контроллер, сервис, taglib и т. Д.:

class SomeController {
    def springSecurityService
    def someAction = { 
        def user = springSecurityService.currentUser 
        …
    } 
}
10 голосов
/ 22 апреля 2009

Я использую 0.5.1, и у меня работает следующее:

class EventController {
  def authenticateService

  def list = { 
     def user = authenticateService.principal() 
     def username = user?.getUsername()
     .....
     .....
  } 
}
5 голосов
/ 21 мая 2013

В настоящее время я думаю, что способ сделать это:

def user = getAuthenticatedUser()
2 голосов
/ 08 июля 2013

Вы также можете получить текущего пользователя этим способом

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

     } 
 }
0 голосов
/ 11 июля 2016

Используйте этот код:

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

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...