是否有“Spring 3 MVC方式”来收听结束会话事件?

时间:2012-03-06 17:09:29

标签: java spring session servlets spring-mvc

我想在用户会话结束时删除一些临时文件。与文件关联的信息存储在使用@SessionAttributes注释的对象中。

我发现处理此问题的唯一方法是创建HttpSessionListener

是否有更高级别,简化,有弹性的方式来收听会话结束事件,我可以轻松获取带注释的对象?

3 个答案:

答案 0 :(得分:6)

您很可能需要创建一个HttpSessionListener。

另一个stackoverflow回答:

Detect session timeout in Spring 3/Spring Security 2.0.5

还有关于如何将spring bean加载到其中的示例:

http://www.mkyong.com/spring/spring-how-to-do-dependency-injection-in-your-session-listener/

答案 1 :(得分:6)

HttpSessionListener与spring bean一起使用的两个选项:

第一种是使用WebApplicationContextUtils.getRequiredApplicationContext(servletContext)来获取servlet上下文。从那里你有两个子选项:

  • 使用getBean(..)
  • 如果您想使用@Autowired / @Inject使用getAutowireCapablyBeanFactory().autowireBean(this)。您只需执行一次(检查字段是否为null),因为侦听器是单身。

第二个选项是在监听器上使用AspectJ and @Configurable

答案 2 :(得分:1)

没有直接关系,但可能是一个值得关注的有趣项目。

https://github.com/shawnmclean/Idle.js

当会话到期时(通常为30万),会话删除通常发生在服务器端。上面的项目允许检测前端的用户行为。