4

我想HttpSession在成功的用户身份验证后添加对象。请不要建议解决方案,SavedRequestAwareAuthenticationSuccessHandler因为在此应用程序中出于某种原因应用程序忽略了原始请求。

public class AuthenticationSuccessListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
    @Override
    public void onApplicationEvent(InteractiveAuthenticationSuccessEvent e) {
        //adding object to HttpSession
    }
} 
4

1 回答 1

10

据我所知,ApplicationListener实例只是您的ApplicationContext. 因此,您应该能够将其他 bean 或资源注入其中。

所以要获得对当前HttpSession实例的引用:

public class AuthenticationSuccessListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {

@Autowired
private HttpSession httpSession;

        @Override
        public void onApplicationEvent(InteractiveAuthenticationSuccessEvent e) {
               //adding object to HttpSession
        }
}

Spring 将HttpSession使用其作用域代理机制注入,确保您获得HTTPSession与当前执行线程相关的信息。

您还需要确保RequestContextListener在 web.xml 中注册 a ,以便 Spring 可以注入当前的HTTPSession.

<listener>  
   <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
</listener>
于 2013-11-05T17:43:53.043 回答