背景
在Java Web应用中,会有一些应用重启的操作,如系统升级,怎么在重启过程中,如何保证Session也能被恢复呢,这就可以通过Tomcat的会话持久化配置实现。
持久化配置
Tomcat默认是支持会话持久化的,在服务重启时将当前在线会话信息持久化本地磁盘。其配置文件为context.xml,其中有对持久化的描述信息如下:
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
即Tomcat默认支持会话持久化,如果需要关闭,则需要放开Manager节点的配置信息。此外,我们也可以定义配置Manager信息,指定持久化文件的目录:
<Manager className="org.apache.catalina.session.PersistentManager" >
debug=0
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1"
<Store className="org.apache.catalina.session.FileStore" directory="指定目录" />
</Manager>
Tomcat的Session持久化有两种策略,一种是存储到本地文件,还有一种就是存储到数据库。
实现
Tomcat会话持久化的本质是利用Java的序列化实现的,所以应用中保存到HttpSession对象中的信息都必须实现Java 的Serializable接口,否则持久化就不会生效。
应用中的用户登录操作是通过往HttpSession中存储User对象信息的,所以只需要让User实现序列化接口,然后用Tomcat的默认持久化配置就能实现应用重启、用户不需要重登陆的效果了。