2013-02-22 2 views
1

Я хотел бы добавить функциональность гостей: это означает, что гости - объекты, которые действуют как пользователи, но не сохраняются и имеют ROLE_GUEST вместо ROLE_USER. Я хотел бы сохранить guestID в сеансе, поэтому, когда гость что-то делает, я могу получить гостя и предпринять действия под именем гостя. Как бы добавить эту информацию, если я хочу сохранить Stateless Servlet.Хранить информацию о гостях в Spring SecurityContextHolder

Мой текущий Войти для зарегистрированного пользователя, как это:

auth = new UsernamePasswordAuthenticationToken(username, password, auths); 
Authentication result = authManager.authenticate(auth); 
SecurityContextHolder.getContext().setAuthentication(result); 

Я ищу что-то либо похожее на это или способ добавить имя гостя где-то в SecurityContextHolder.getContext() непосредственно. Могу ли я получить объект весны Session или другой сеанс, чтобы сохранить эту информацию?

Я не использую Spring MVC.

ответ

0

Вместо подделки UsernamePasswordAuthenticationToken вы должны использовать anonymous authentication mechanism, предоставляемый каркасом. Вы можете настроить его с помощью пространства имен безопасности:

<security:http ....> 
    .... 
    <security:anonymous username="guest" granted-authority="ROLE_GUEST"/> 
</security:http> 

Это заставит AnonymousAuthenticationFilter разместить AnonymousAuthenticationToken с предоставленным именем и роль в контексте безопасности. (Конечно, это произойдет только в том случае, если другие фильтры, такие как UsernamePasswordAuthenticationFilter, не смогли выполнить аутентификацию пользователя.)

+0

В этой конфигурации имя гостя фиксировано и нет возможности различать гостей. Я ищу способ прикрепить к ним уникальное имя для гостей. – Vjeetje

+0

Как получить уникальное имя для неаутентифицированного запроса? – zagyi

+0

У меня есть UserManager, который имеет список гостей, новое имя создается следующим образом: String guestName = "guest" + random.Int(); Если имя гостя уже находится в списке, будет проверено другое имя guestname. Имя пользователя, которое старше 24 часов, удаляется из списка. То, что я на самом деле ищу, - это способ привязать имя guest к сеансу и определить, когда сеанс нарушен, чтобы удалить guestName. Но я не знаю, как ... – Vjeetje

Смежные вопросы