Spring Security: добавьте дополнительные атрибуты (свойства) в сеанс при успешной аутентификации - PullRequest
8 голосов
/ 20 февраля 2012

Простой вопрос: как лучше всего добавить атрибуты (свойства) в HttpSession при успешной аутентификации?Например, идентификатор пользователя.

Сейчас я использую свою собственную реализацию SimpleUrlAuthenticationSuccessHandler в UsernamePasswordAuthenticationFilter и делаю это так:

public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication auth)
            throws IOException, ServletException {
        PersonBean person = (PersonBean) auth.getPrincipal();
        request.getSession().setAttribute("currentUserId", person .getId().toString());
        super.onAuthenticationSuccess(request, response, auth);

Но я не думаю, что это хороший подход, поскольку есть другойспособы сделать аутентификацию (например, RememberMe).

Так что мне нужно использовать здесь?

Ответы [ 2 ]

5 голосов
/ 21 февраля 2012

Ответ был дан на весеннем форуме. Ссылка .

Как правило, необходимо реализовать ApplicationListener, который прослушивает события succes и помещает туда дополнительные атрибуты.

Но в моем случае его не требуется хранитьатрибуты в сеансе.Я могу получить идентификатор пользователя, как здесь:

var userId = ${pageContext.request.userPrincipal.principal.id}
0 голосов
/ 21 февраля 2012

Spring делает все это за вас, вам нужно будет создать таблицу * persistent_logins *, вот фрагмент из контекста приложения, который может помочь. А в официальной документации доктора подробно опишите что требуется:

<security:http auto-config='true'>
  <security:intercept-url pattern="/**" access="ROLE_USER" />
  <security:form-login login-page="/Login"
     authentication-success-handler-ref="authenticationSuccessHandler"
     authentication-failure-url="/Login?login_error=1" />
  <security:remember-me data-source-ref="dataSource"
    user-service-ref="myUserService" />
</security:http>

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

<sec:authentication property="principal.username" />

и из вашего кода Java это можно сделать:

MyUser user = (MyUser) authentication.getPrincipal();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...