Java 如何在AuthenticationSuccessHandler中检索会话范围的bean?

Java 如何在AuthenticationSuccessHandler中检索会话范围的bean?,java,spring,spring-mvc,dependency-injection,session-scope,Java,Spring,Spring Mvc,Dependency Injection,Session Scope,我有一个自定义AuthenticationSuccessHandler 我想做的是在onAuthenticationSuccess方法中设置一些会话数据 为了存储会话数据,我想使用会话范围的bean,它在任何控制器中都可以正常工作 但如果我尝试在onAuthenticationSuccess方法中检索它,我会得到一个异常: 创建名为的bean时出错 “scopedTarget.sessionData”:作用域 “会话”未在服务器上处于活动状态 当前线程 我的代码是: WebApplication

我有一个自定义AuthenticationSuccessHandler

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

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

但如果我尝试在onAuthenticationSuccess方法中检索它,我会得到一个异常:

创建名为的bean时出错 “scopedTarget.sessionData”:作用域 “会话”未在服务器上处于活动状态 当前线程

我的代码是:

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

有什么想法吗?

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

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

org.springframework.web.context.request.RequestContextListener
默认情况下,该状态由
DispatcherServlet
公开,因此在请求进入
DispatcherServlet
之前,该状态不可用(例如,在Spring安全过滤器中)