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