我想在用户会话结束时删除一些临时文件。与文件关联的信息存储在使用@SessionAttributes
注释的对象中。
我发现处理此问题的唯一方法是创建HttpSessionListener
。
是否有更高级别,简化,有弹性的方式来收听会话结束事件,我可以轻松获取带注释的对象?
答案 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万),会话删除通常发生在服务器端。上面的项目允许检测前端的用户行为。