91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot2 session設置超時時間無效的解決方法

發布時間:2021-07-02 15:44:56 來源:億速云 閱讀:1375 作者:chen 欄目:開發技術

本篇內容介紹了“Springboot2 session設置超時時間無效的解決方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

問題:

今天項目中遇到了一個設置時間超時的問題,按SpringBoot2的application.properties更改一直不生效。

解決方案:

  • server.*屬性用于控制Spring Boot使用的嵌入式容器 。 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 path="/abtest" docBase="/abtest"  
  defaultSessionTimeOut="3600" isWARExpanded="true"  
  isWARValidated="false" isInvokerEnabled="true"  
  isWorkDirPersistent="false"/>

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設置超時時間無效的解決方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福泉市| 玛沁县| 保亭| 文昌市| 永仁县| 石渠县| 尤溪县| 运城市| 利津县| 定安县| 阜宁县| 宣汉县| 金秀| 塔河县| 金乡县| 仲巴县| 云阳县| 永靖县| 南郑县| 大新县| 纳雍县| 大方县| 宜宾市| 昂仁县| 钟祥市| 武川县| 昌宁县| 桃江县| 鹤岗市| 哈密市| 沂源县| 晴隆县| 福清市| 阿克陶县| 秭归县| 沁源县| 安义县| 林西县| 米易县| 普安县| 云林县|