SpringBoot設(shè)置Session失效時間的解決方案
springboot的yml文件中設(shè)置session的過期時間
#Session超時時間設(shè)置,單位是秒,默認(rèn)是30分鐘 servlet: session: timeout: 3600s
當(dāng)過期時間是大于1分鐘的時候是沒有什么問題的,但是如果設(shè)置過期時間小于1分鐘,就會失效。
servlet: session: timeout: 10
因為SpringBoot在TomcatServletWebServerFactory
為session的過期時間做了優(yōu)化。
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
轉(zhuǎn)換為分鐘sessionTimeout.toMinutes()
public long toMinutes() { return seconds / SECONDS_PER_MINUTE; } /** * Seconds per minute. */ static final int SECONDS_PER_MINUTE = 60;
將轉(zhuǎn)換后的值和1L進行比較
public static long max(long a, long b) { return (a >= b) ? a : b; }
如果該值小于1分鐘,則按1分鐘算。
最后返回的是三目運算的結(jié)果。
到此這篇關(guān)于SpringBoot設(shè)置Session失效時間的文章就介紹到這了,更多相關(guān)SpringBoot設(shè)置Session失效時間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java編程通過list接口實現(xiàn)數(shù)據(jù)的增刪改查代碼示例
這篇文章是介紹Java編程基礎(chǔ)方面的內(nèi)容,涉及l(fā)ist接口的操作,通過list接口實現(xiàn)對數(shù)據(jù)的增刪改查的相關(guān)代碼,具有一定參考價值,需要的朋友可以了解下。2017-10-10Java線程中斷機制interrupt、isInterrupted、interrupted方法詳解
這篇文章主要介紹了Java線程中斷機制interrupt、isInterrupted、interrupted方法詳解,一個線程不應(yīng)該由其他線程來強制中斷或停止,而是應(yīng)該由線程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已經(jīng)被廢棄了,需要的朋友可以參考下2024-01-01Java中LinkedList數(shù)據(jù)結(jié)構(gòu)的詳細(xì)介紹
這篇文章主要介紹了Java中LinkedList,Linked List 是 java.util 包中 Collection 框架的一部分,文中提供了詳細(xì)的代碼說明,需要的朋友可以參考下2023-05-05