如何在AuthenticationSuccessHandler中检索会话范围的bean?
问题内容:
我有一个自定义AuthenticationSuccessHandler。
我想做的是在onAuthenticationSuccess方法中设置一些会话数据。
为了存储会话数据,我想使用一个会话范围的bean,它在任何控制器中都能正常工作。
但是,如果我尝试在onAuthenticationSuccess方法中检索它,则会出现异常:
创建名称为“ scopedTarget.sessionData”的bean时出错:作用域“会话”在当前线程中未激活;
我的代码是:
WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
SessionData sessionData = context.getBean(SessionData.class);
有任何想法吗?
问题答案:
您可以尝试声明一个侦听器,该侦听器公开实现会话范围所必需的状态:
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
默认情况下,状态由公开DispatcherServlet
,因此在请求进入之前DispatcherServlet
(例如,在Spring
Security过滤器中)状态不可用。