4

我有一个自定义的 AuthenticationSuccessHandler。

我想要做的是在 onAuthenticationSuccess 方法中设置一些会话数据。

为了存储会话数据,我想使用一个会话范围的 bean,它在任何控制器中都可以正常工作。

但是,如果我尝试在 onAuthenticationSuccess 方法中检索它,则会出现异常:

创建名为“scopedTarget.sessionData”的 bean 时出错:范围“会话”对于当前线程不活动;

我的代码是:

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

有任何想法吗?

4

1 回答 1

6

您可以尝试声明一个侦听器,该侦听器公开实现会话范围所需的状态:

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

默认情况下,状态由 公开DispatcherServlet,因此在请求进入之前它不可用DispatcherServlet(例如在 Spring Security 过滤器中)。

于 2011-03-24T14:02:30.030 回答