SpringBoot設(shè)置Session失效時(shí)間的解決方案
springboot的yml文件中設(shè)置session的過(guò)期時(shí)間
#Session超時(shí)時(shí)間設(shè)置,單位是秒,默認(rèn)是30分鐘 servlet: session: timeout: 3600s
當(dāng)過(guò)期時(shí)間是大于1分鐘的時(shí)候是沒(méi)有什么問(wèn)題的,但是如果設(shè)置過(guò)期時(shí)間小于1分鐘,就會(huì)失效。
servlet: session: timeout: 10
因?yàn)镾pringBoot在TomcatServletWebServerFactory
為session的過(guò)期時(shí)間做了優(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();
過(guò)期時(shí)間取自getSessionTimeoutInMinutes
方法。
private long getSessionTimeoutInMinutes() { Duration sessionTimeout = this.getSession().getTimeout(); return this.isZeroOrLess(sessionTimeout) ? 0L : Math.max(sessionTimeout.toMinutes(), 1L); }
在這里對(duì)sessionTimeout
進(jìn)行判斷,首先判斷是否為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進(jìn)行比較
public static long max(long a, long b) { return (a >= b) ? a : b; }
如果該值小于1分鐘,則按1分鐘算。
最后返回的是三目運(yùn)算的結(jié)果。
到此這篇關(guān)于SpringBoot設(shè)置Session失效時(shí)間的文章就介紹到這了,更多相關(guān)SpringBoot設(shè)置Session失效時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java編程通過(guò)list接口實(shí)現(xiàn)數(shù)據(jù)的增刪改查代碼示例
這篇文章是介紹Java編程基礎(chǔ)方面的內(nèi)容,涉及l(fā)ist接口的操作,通過(guò)list接口實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查的相關(guān)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10Java線(xiàn)程中斷機(jī)制interrupt、isInterrupted、interrupted方法詳解
這篇文章主要介紹了Java線(xiàn)程中斷機(jī)制interrupt、isInterrupted、interrupted方法詳解,一個(gè)線(xiàn)程不應(yīng)該由其他線(xiàn)程來(lái)強(qiáng)制中斷或停止,而是應(yīng)該由線(xiàn)程自己自行停止,所以,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ì)的代碼說(shuō)明,需要的朋友可以參考下2023-05-05springboot入門(mén)之profile設(shè)置方式
這篇文章主要介紹了springboot入門(mén)?profile設(shè)置方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04Java使用poi獲取不到docx表格中書(shū)簽的問(wèn)題及解決
這篇文章主要介紹了Java使用poi獲取不到docx表格中書(shū)簽的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06