Как получить сессионный компонент внутри AuthenticationSuccessHandler? - PullRequest
4 голосов
/ 24 марта 2011

У меня есть собственный AuthenticationSuccessHandler.

Что я хочу сделать, это установить некоторые данные сеанса в методе onAuthenticationSuccess.

Для хранения данных сеанса я хочу использовать сессионный компонент,который отлично работает в любом контроллере.

Но если я пытаюсь получить его с помощью метода onAuthenticationSuccess, я получаю исключение:

Ошибка создания компонента с именем 'scopedTarget.sessionData': Scope'сеанс' не активен для текущего потока;

Мой код:

WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
SessionData sessionData = context.getBean(SessionData.class);

Есть идеи?

1 Ответ

6 голосов
/ 24 марта 2011

Вы можете попытаться объявить прослушиватель, который выставляет состояние, необходимое для реализации области сеанса:

<listener>
  <listener-class>
      org.springframework.web.context.request.RequestContextListener
  </listener-class>
</listener>

По умолчанию это состояние предоставляется DispatcherServlet, поэтому оно недоступно до поступления запроса DispatcherServlet (например, в фильтрах Spring Security).

...