SpringBoot设置Session失效时间
springboot的yml文件中设置session的过期时间
#Session超时时间设置,单位是秒,默认是30分钟
servlet:
session:
timeout: 3600s
当过期时间是大于1分钟的时候是没有什么问题的,但是如果设置过期时间小于1分钟,就会失效。
servlet:
session:
timeout: 10
因为SpringBoot在TomcatServletWebServerFactory
为session的过期时间做了优化。
Session的配置configureSession
private void configureSession(Context context) {
long sessionTimeout = this.getSessionTimeoutInMinutes();
context.setSessionTimeout((int)sessionTimeout);
Boolean httpOnly = this.getSession().getCookie().getHttpOnly();
if (httpOnly != null) {
context.setUseHttpOnly(httpOnly);
}
if (this.getSession().isPersistent()) {
Manager manager = context.getManager();
if (manager == null) {
manager = new StandardManager();
context.setManager((Manager)manager);
}
this.configurePersistSession((Manager)manager);
} else {
context.addLifecycleListener(new TomcatServletWebServerFactory.DisablePersistSessionListener());
}
}
我们看到long sessionTimeout = this.getSessionTimeoutInMinutes();
过期时间取自getSessionTimeoutInMinutes
方法。
private long getSessionTimeoutInMinutes() {
Duration sessionTimeout = this.getSession().getTimeout();
return this.isZeroOrLess(sessionTimeout) ? 0L : Math.max(sessionTimeout.toMinutes(), 1L);
}
在这里对sessionTimeout
进行判断,首先判断是否为0或者更少isZeroOrLess
方法
private boolean isZeroOrLess(Duration sessionTimeout) {
return sessionTimeout == null || sessionTimeout.isNegative() || sessionTimeout.isZero();
}
将sessionTimeout
转换为分钟sessionTimeout.toMinutes()
public long toMinutes() {
return seconds / SECONDS_PER_MINUTE;
}
/**
* Seconds per minute.
*/
static final int SECONDS_PER_MINUTE = 60;
将转换后的值和1L进行比较
public static long max(long a, long b) {
return (a >= b) ? a : b;
}
如果该值小于1分钟,则按1分钟算。
最后返回的是三目运算的结果。
分类:
后端
标签:
SpringBoot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix