搜尋
首頁Javajava教程Springboot2 session設定超時時間無效怎麼解決

Springboot2 session設定超時時間無效怎麼解決

May 22, 2023 pm 01:49 PM
sessionspringboot

問題:

今天專案中遇到了一個設定時間逾時的問題,按SpringBoot2的application.properties變更一直不生效。

解決方案:

  • Spring Boot使用的內嵌容器受server.*屬性的控制。 Spring Boot將使用ServletWebServerFactory實例之一來建立servlet容器的執行個體。這些類別利用 ​​server.* 屬性來設定受管制的 Servlet 容器(例如 Tomcat、Jetty 等)。

  • 當應用程式打包成war檔部署到Tomcat實例時,就不能使用 server.* 屬性。這些不適用,因為可以利用預設的servlet容器(因為服務是在遠端運行的)。因此,部署到遠端Tomcat將使server.*屬性無用。

1. 依照網路給的貼文更改設定檔(如果是Jar啟動生效) ,如下:

server:
  servlet:
    session:
      timeout: PT1H        # 1小时过期
      cookie:
        max-age: PT1H      # 1小时过期

說明:PT1H 意思是設定session失效的時間是1小時。

擴充功能:Duration

透過查看springboot原始碼發現setTimeouot方法,這裡要求傳入Duration的實例

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

Duration是在Java8中新增的,主要用來計算日期差值,Duration是被final聲明的,而且是線程安全的。

如果轉換字串方式,類似於SimpleDateFormat 的格式化日期方式

Duration 字串類似數字有正負之分:預設為正,負以'-'開頭,下面緊接著'PT', 下面時間字母:

  • 'D' – 天

  • 'H' – 小時

  • 'M' – 分鐘

  • 'S' – 秒

#每個單位都必須由數字開始,且時分秒順序不能亂,例如:PT2H3M2S 等於-PT-2H-3M-2S。

2. 設定tomcat的session逾時

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

<context></context>

2) 專案中更改web.xml:

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

3)在程式中更改

session.setMaxInactiveInterval(30*60);

當你遇到同樣的問題時,請先看上面的紅字,按順序排查即可。

測試程式碼:

@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();
    }
}

時間不同步導致Spring session失效的巨坑

Linux伺服器時間不同步導致Spring session失效的巨坑

由於業務的需要,將原本單機環境轉為叢集式環境,為了不修改任務所以選擇了spring session redis作為session共享方案。

確認技術方案之後就在網路上巴拉巴拉的搜尋一堆關於spring session的資料,看了一遍沒有發現前人有任何躺坑後,開始著手。

安裝redis過程忽略。

根據資料一步一步的將spring session加入工程,單節點情況項目成功跑起來,沒有報錯,session也成功的寫入了redis。

然後為了穩妥起見,又在自己電腦上安裝了nginx,並部署了3個tomcat,一切看起來都那麼完美,多個節點之間完成了session共享。

到目前已經完成了所有前期準備,就差最後一步了。

惡夢開始了…

在線上將所有節點部署完成,然後打開瀏覽器順利訪問到應用,當然我們不能只停留在看到頁面完事的地步,怎麼也要登入登入吧,於是…

然後…

無數次的輸入使用者密碼,提示登入成功,最終的結果還是被拒之門外,o(╥﹏╥)o

接下來就是無數的填坑之旅

看日誌…

看各種請求請求…

懷疑spring session有BUG… …

甚至開啟了遠端DEBUG模式調試,終於在萬能的DEBUG模式下看到,spring session的getSession的時候,如果獲取到了session,首先會判斷此session有沒有過期,比較的方式也很簡單,就是取得目前系統時間去和session的過期時間進行比較,如果目前時間小於過期時間,則標識此session沒有過期。 看到這裡,瞬間有了一股醍醐灌頂之感,小宇宙終於在這裡爆發了。

尼瑪—>取得的session全部是過期的,然後…然後…當然是趕緊跑去看伺服器時間,於是…哭了o(╥﹏╥)o,原來尼瑪是你坑了我…

為了紀念這次躺坑之旅,特發此文

#另外順便記錄Linux伺服器時間同步

#date指令:

date :查看目前時間,結果如下:Tue Mar 4 01:36:45 CST 2017

date -s 09:38:40 :設定目前時間,結果如下:Tue Mar 4 09:38:40 CST 2017

ntpdate指令:

ntpdate -u ntp.api.bz :網路時間同步指令

ntp常用伺服器:

中國國家授時中心:210.72.145.44

NTP伺服器(上海) :ntp.api.bz

以上是Springboot2 session設定超時時間無效怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具