亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot2 session設(shè)置超時(shí)時(shí)間無(wú)效的解決

 更新時(shí)間:2021年07月02日 11:35:39   作者:washingtin  
這篇文章主要介紹了Springboot2 session設(shè)置超時(shí)時(shí)間無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問(wèn)題:

今天項(xiàng)目中遇到了一個(gè)設(shè)置時(shí)間超時(shí)的問(wèn)題,按SpringBoot2的application.properties更改一直不生效。

解決方案:

  • server.*屬性用于控制Spring Boot使用的嵌入式容器 。 Spring Boot將使用ServletWebServerFactory實(shí)例之一創(chuàng)建servlet容器的實(shí)例。 這些類使用server.*屬性來(lái)配置受控的servlet容器(tomcat,jetty等)。
  • 當(dāng)應(yīng)用程序作為war文件部署到Tomcat實(shí)例時(shí), server.*屬性不適用。 它們不適用,因?yàn)榭梢允褂妙A(yù)先配置的servlet容器(因?yàn)樗沁h(yuǎn)程運(yùn)行的服務(wù))。 因此,部署到遠(yuǎn)程Tomcat將使server.*屬性無(wú)用。

1. 按照網(wǎng)上給的帖子更改配置文件(如果是Jar啟動(dòng)生效) ,如下:

server:
  servlet:
    session:
      timeout: PT1H        # 1小時(shí)過(guò)期
      cookie:
        max-age: PT1H      # 1小時(shí)過(guò)期

說(shuō)明:PT1H 意思是設(shè)置session失效的時(shí)間是1小時(shí)。

擴(kuò)展:Duration

通過(guò)查看springboot源碼發(fā)現(xiàn)setTimeouot方法,這里要求傳入Duration的實(shí)例

    public void setTimeout(Duration timeout) {
       this.timeout = timeout;
    }

Duration是在Java8中新增的,主要用來(lái)計(jì)算日期差值,Duration是被final聲明的,并且是線程安全的。

如果轉(zhuǎn)換字符串方式,類似于 SimpleDateFormat 的格式化日期方式

Duration 字符串類似數(shù)字有正負(fù)之分:默認(rèn)為正,負(fù)以'-'開頭,下面緊接著'PT', 下面時(shí)間字母:

  • 'D' – 天
  • 'H' – 小時(shí)
  • 'M' – 分鐘
  • 'S' – 秒

每個(gè)單位都必須由數(shù)字開始,且時(shí)分秒順序不能亂,比如:PT2H3M2S 等于 -PT-2H-3M-2S。

2. 設(shè)置tomcat的session超時(shí)

1)在tomcat的conf目錄下,更改servler.xml:

<Context path="/abtest" docBase="/abtest"  
  defaultSessionTimeOut="3600" isWARExpanded="true"  
  isWARValidated="false" isInvokerEnabled="true"  
  isWorkDirPersistent="false"/>

2) 項(xiàng)目中更改web.xml:

<session-config>  
    <session-timeout>20</session-timeout>  
</session-config>

3)在程序中更改

session.setMaxInactiveInterval(30*60);

當(dāng)你遇到同樣的問(wèn)題時(shí),請(qǐng)先看上面的紅字,按順序排查即可。

測(cè)試代碼:

@RestController
@RequestMapping("/valid-time")
public class TestController { 
    @GetMapping("/test")
    public String validTime(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession(); 
        int sessionTime = session.getMaxInactiveInterval(); 
        return new StringBuilder("sessionTime=").append(sessionTime).toString();
    }
}

時(shí)間不同步導(dǎo)致Spring session失效的巨坑

Linux服務(wù)器時(shí)間不同步導(dǎo)致Spring session失效的巨坑

由于業(yè)務(wù)的需要,將原本單機(jī)環(huán)境轉(zhuǎn)為集群式環(huán)境,為了不修改任務(wù)所以選擇了spring session + redis作為session共享方案。

確認(rèn)技術(shù)方案之后就在網(wǎng)上巴拉巴拉的搜索一堆關(guān)于spring session的資料,看了一遍沒(méi)有發(fā)現(xiàn)前人有任何躺坑后,開始著手。

安裝redis過(guò)程忽略。

根據(jù)資料一步一步的將spring session加入工程,單節(jié)點(diǎn)情況項(xiàng)目成功跑起來(lái),沒(méi)有報(bào)錯(cuò),session也成功的寫入了redis。

然后為了穩(wěn)妥起見(jiàn),又在自己電腦上安裝了nginx,并部署了3個(gè)tomcat,一切看起來(lái)都那么完美,多個(gè)節(jié)點(diǎn)之間完成了session共享。

到目前已經(jīng)完成了所有前期準(zhǔn)備,就差最后一步了。

噩夢(mèng)開始了……

在線上將所有節(jié)點(diǎn)部署完成,然后打開瀏覽器順利訪問(wèn)到應(yīng)用,當(dāng)然我們不能僅僅停留在看到頁(yè)面完事的地步,怎么也要登錄登錄吧,于是……

然后……

無(wú)數(shù)次的輸入用戶密碼,提示登錄成功,最終的結(jié)果還是被拒之門外,o(╥﹏╥)o

接下來(lái)就是無(wú)數(shù)的填坑之旅

看日志……

看各種請(qǐng)求請(qǐng)求……

懷疑spring session有BUG……

甚至開啟了遠(yuǎn)程DEBUG模式調(diào)試,終于在萬(wàn)能的DEBUG模式下看到,spring session的getSession的時(shí)候,如果獲取到了session,首先會(huì)判斷此session有沒(méi)有過(guò)期,比較的方式也很簡(jiǎn)單,就是獲取當(dāng)前系統(tǒng)時(shí)間去和session的過(guò)期時(shí)間進(jìn)行比較,如果當(dāng)前時(shí)間小于過(guò)期時(shí)間,則標(biāo)識(shí)此session沒(méi)有過(guò)期。看到這里,瞬間有了一股醍醐灌頂之感,小宇宙終于在這里爆發(fā)了。

—>獲取的session全部是過(guò)期的,然后……然后……當(dāng)然是趕緊跑去看服務(wù)器時(shí)間,于是……哭了o(╥﹏╥)o,原來(lái)是你坑了我……

為了紀(jì)念這次躺坑之旅,特發(fā)此文

另外順便記錄一下Linux服務(wù)器時(shí)間同步

date命令:

date :查看當(dāng)前時(shí)間,結(jié)果如下:Tue Mar 4 01:36:45 CST 2017

date -s 09:38:40 :設(shè)置當(dāng)前時(shí)間,結(jié)果如下:Tue Mar 4 09:38:40 CST 2017

ntpdate命令:

ntpdate -u ntp.api.bz :網(wǎng)絡(luò)時(shí)間同步命令

ntp常用服務(wù)器:

中國(guó)國(guó)家授時(shí)中心:210.72.145.44

NTP服務(wù)器(上海) :ntp.api.bz

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 線程池的實(shí)現(xiàn)方法

    java 線程池的實(shí)現(xiàn)方法

    在本篇文章里小編給大家整理了關(guān)于java 線程池的實(shí)現(xiàn)方法,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • idea如何自動(dòng)添加版權(quán)許可證信息

    idea如何自動(dòng)添加版權(quán)許可證信息

    這篇文章主要介紹了idea如何自動(dòng)添加版權(quán)許可證信息問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java中Object轉(zhuǎn)換為L(zhǎng)ist類型的實(shí)現(xiàn)方法

    Java中Object轉(zhuǎn)換為L(zhǎng)ist類型的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java中Object轉(zhuǎn)換為L(zhǎng)ist類型的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 關(guān)于JSqlparser使用攻略(高效的SQL解析工具)

    關(guān)于JSqlparser使用攻略(高效的SQL解析工具)

    這篇文章主要介紹了關(guān)于JSqlparser使用攻略(高效的SQL解析工具),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • IDEA中make directory as的作用及說(shuō)明

    IDEA中make directory as的作用及說(shuō)明

    這篇文章主要介紹了IDEA中make directory as的作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Java使用迭代器Iterator遍歷集合

    Java使用迭代器Iterator遍歷集合

    Iterator對(duì)象稱為迭代器(設(shè)計(jì)模式的一種),主要用于遍歷 Collection 集合中的元素。本文就來(lái)和大家詳細(xì)聊聊Java如何使用迭代器Iterator實(shí)現(xiàn)遍歷集合,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • Spring?Boot與Spring?MVC?Spring對(duì)比及核心概念

    Spring?Boot與Spring?MVC?Spring對(duì)比及核心概念

    這篇文章主要為大家介紹了Spring?Boot與Spring?MVC?Spring的對(duì)比以及你需要了解的核心概念,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解

    Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解

    這篇文章主要介紹了Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 基于序列化存取實(shí)現(xiàn)java對(duì)象深度克隆的方法詳解

    基于序列化存取實(shí)現(xiàn)java對(duì)象深度克隆的方法詳解

    本篇文章是對(duì)序列化存取實(shí)現(xiàn)java對(duì)象深度克隆的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Log4j如何屏蔽某個(gè)類的日志打印

    Log4j如何屏蔽某個(gè)類的日志打印

    這篇文章主要介紹了Log4j如何屏蔽某個(gè)類的日志打印,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論