Недавно я перешел из плагина JSecurity в Spring Security. Как получить аутентифицированного пользователя из моих контроллеров?
Grails и Spring Безопасность. Как получить аутентифицированного пользователя из контроллера?
Ответ 1
Я использую 0.5.1, и для меня работает следующее:
class EventController {
def authenticateService
def list = {
def user = authenticateService.principal()
def username = user?.getUsername()
.....
.....
}
}
Ответ 2
В настоящее время он не документирован, но в файле установки плагина есть три метода, которые он добавляет к каждому контроллеру, так что вам фактически не нужно вводить аутентификацию. Сервис:
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), связанный с главным пользователем зарегистрированного пользователя.
Ответ 3
Следующий код из Spring плагина безопасности Core (версия: 1.1.2) - справочная документация - раздел 6.2
grails.plugins.springsecurity.SpringSecurityService предоставляет функции утилиты безопасности. Это регулярная служба Grails, поэтому вы используете инъекцию зависимостей, чтобы ввести ее в контроллер, службу, taglib и т.д.:
class SomeController {
def springSecurityService
def someAction = {
def user = springSecurityService.currentUser
…
}
}
Ответ 4
В настоящее время я думаю, что способ сделать это:
def user = getAuthenticatedUser()
Ответ 5
Вы можете получить текущего Пользователя таким образом также
class AnyController {
def springSecurityService
def someAction = {
def user = User.get(springSecurityService.principal.id)
}
}
Ответ 6
Используйте этот код:
if (springSecurityService.isLoggedIn()){
println "Logged In"
}