【问题标题】:How to retrieve a session-scoped bean inside AuthenticationSuccessHandler?如何在 AuthenticationSuccessHandler 中检索会话范围的 bean?
【发布时间】:2011-07-22 04:00:29
【问题描述】:

我有一个自定义的 AuthenticationSuccessHandler。

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

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

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

使用名称创建 bean 时出错 'scopedTarget.sessionData':范围 “会话”对 当前线程;

我的代码是:

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

有什么想法吗?

【问题讨论】:

    标签: java spring spring-mvc dependency-injection session-scope


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 2018-06-25
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2011-01-11
      相关资源
      最近更新 更多