Как сохранить Spring Security вошедшего в систему пользователя в сеансе - PullRequest
1 голос
/ 30 мая 2010

Этот код получает пользователя, который в данный момент вошел в систему, используя плагин Spring Security (acegi):

def principalInfo = authenticateService.principal()
def person = null
if (principalInfo != "anonymousUser" && principalInfo.username) {
    person = Person.findByUsername(principalInfo.username)
}

Я бы тогда хотел сделать:

session.user = person

Это нужно сделать после того, как пользователь войдет в систему. Я не могу понять, где разместить свой код для этого. Кажется, в контроллере входа должно быть какое-то место, но я не вижу, где.

Ответы [ 2 ]

1 голос
/ 30 мая 2010

Почему вы хотите это сделать? Человек уже прикреплен к принципалу, который находится на сессии. Вызовите authenticateService.userDomain () для доступа к нему.

0 голосов
/ 31 мая 2010

Spring не устанавливает объект пользователя непосредственно в сеансе. Однако они помещают объект SPRING_SECURITY_CONTEXT в сеанс. Это содержит аутентифицированного пользователя.

В вашем gsp будет работать следующее:

${session.SPRING_SECURITY_CONTEXT?.authentication?.authenticated}

или просто прямо в коде вашего контроллера. Я использую это с плагином навигации, чтобы показать определенные меню:

static navigation = [
        group:'tabs', 
        order:10, 
        isVisible: {  session.SPRING_SECURITY_CONTEXT?.authentication?.authenticated }
    ]

и, чтобы ответить на ваш вопрос, вы можете получить пользовательский объект следующим образом:

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