Java Vert.x Web中如何修改默认会话超时时间
Vert.x Web 自定义会话超时的实现方式
你定位到的DEFAULT_SESSION_TIMEOUT = 1800000L是SessionHandler初始化逻辑里的兜底默认值,并非无法覆盖的强制硬编码,完全不需要修改源码或者反射篡改静态常量,通过实例级配置就能直接把默认30分钟的超时改成60分钟。
具体实现步骤
- 按照常规流程初始化你的Session存储实例(比如内存存储、Redis存储等项目中实际使用的存储实现)
- 创建SessionHandler实例时,链式调用内置的
setSessionTimeout方法,传入对应时长的毫秒值覆盖默认配置 - 将配置完成的SessionHandler正常挂载到路由链路上即可生效
参考代码示例
// 初始化项目使用的Session存储,此处以本地内存存储为例 SessionStore sessionStore = SessionStore.localStore(vertx, new LocalSessionStoreOptions()); // 构建自定义配置的SessionHandler SessionHandler sessionHandler = SessionHandler.create(sessionStore) // 设置会话超时为60分钟,单位为毫秒:60 * 60 * 1000 = 3600000L .setSessionTimeout(3600000L); // 将Handler挂载到路由全局链路上 router.route().handler(sessionHandler);
常见避坑提示
setSessionTimeout的参数单位为毫秒,不要直接传入60作为参数,否则会触发60毫秒的超时常量错误- 该配置的计时逻辑和默认值一致:从最后一次会话无操作的时间点开始计算超时,不是会话创建后的绝对存活时长
- 不推荐通过反射修改
DEFAULT_SESSION_TIMEOUT静态常量实现全局修改:这种方式会影响所有走默认初始化逻辑的SessionHandler实例,没有隔离性,升级Vert.x版本时也会有适配风险 - 如果项目是通过依赖注入(如Spring、Vert.x DI)装配SessionHandler Bean,只要在Bean的初始化逻辑中调用上述
setSessionTimeout方法即可,和手写代码的配置逻辑完全一致
内容的提问来源于stack exchange,提问作者Idriss Benbassou
相关产品推荐
相关产品推荐

