Wicket-9:如何防止Web容器重启后会话存储的数据被清除
Wicket 9.5 开启Tomcat重启会话持久化配置方案
Wicket 9.x 相较于8.x版本调整了会话序列化的默认配置,默认关闭了会话序列化支持,导致Tomcat自带的会话持久化机制无法正常持久化Wicket会话对象,就会出现重启后会话丢失、用户需要重新登录的问题。按照以下步骤配置即可恢复8.x版本的会话持久化效果:
1. 调整Wicket应用核心配置
在你自定义的、继承自WebApplication的Wicket主应用类的init()方法中,添加如下配置:
// 开启会话序列化,支持Tomcat容器对会话进行持久化读写 getSessionStore().setSerializeSessions(true); // 配置兼容JDK序列化规则的序列化器,和Wicket 8默认行为保持一致 getFrameworkSettings().setSerializer(new JavaSerializer(getApplicationKey()));
2. 确认Tomcat会话持久化开关未被关闭
检查以下两个位置的配置,确保没有禁用Tomcat默认的会话持久化能力:
- Tomcat全局配置:
${CATALINA_HOME}/conf/context.xml - 应用私有配置:项目
WEB-INF/META-INF/context.xml
如果配置中存在<Manager pathname="" />,删除该行即可,Tomcat默认会在重启时将会话持久化到work目录下的SESSIONS.ser文件中。
3. 校验会话存储对象的序列化兼容性
确保你自定义的WicketSession子类、以及所有存储在会话中的自定义业务对象都实现了java.io.Serializable接口;对于不需要持久化的临时属性,使用transient关键字标记,避免序列化失败。
验证方式
完成配置后启动应用,登录任意用户,正常停止Tomcat实例,检查Tomcatwork/Catalina/localhost/[你的应用上下文路径]目录下是否生成SESSIONS.ser文件,再重启Tomcat,不需要重新登录即可验证配置生效。
内容的提问来源于stack exchange,提问作者A.Alexander
相关产品推荐
相关产品推荐

