SpringBoot session超時的問題


最近在做SpringBoot的項目,用到了session,發現放置好session后,過一會就失效了,用下面發語句獲取session失效時間,發現是60s

request.getSession().getMaxInactiveInterval();

去網上查找,發現大多解決問題的辦法是 在啟動類中main方法的下面加入以下方法來手動設置session失效時間
@Bean 
public EmbeddedServletContainerCustomizer containerCustomizer(){ 
       return new EmbeddedServletContainerCustomizer() { 
 @Override 
 public void customize(ConfigurableEmbeddedServletContainer Container) { 
       container.setSessionTimeout(1800);//單位為S 
            } 
       }; 
   } 

但是社會在發展,時代在進步,SpringBoot2.0以后已經不支持這種方式了
ps:可以在pom文件中查看你的SpringBooot版本。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

SpringBoot2.0以后的版本只需要在application.properties中加入以下配置就好
server.servlet.session.timeout = PT5H

這里重點解釋一下 PT5H 意思是設置session失效的時間是5小時
通過查看setTimeouot的方法,這里要求傳入Duration的實例
public void setTimeout(Duration timeout) {
this.timeout = timeout;
}

Duration是在Java8中新增的,主要用來計算日期差值

Duration是被final聲明的,並且是線程安全的

Duration轉換字符串方式,默認為正,負以-開頭,緊接着P,以下字母不區分大小寫
D :天 T:天和小時之間的分隔符 H :小時 M:分鍾 S:秒 每個單位都必須是數字,且時分秒順序不能亂
比如P2dt3m5s P3d pt3h

最后總結一下Duration最實用的一個功能其實是 between 方法,因為有很多時候我們需要計算兩個日期之間的天數或者小時數,用這個就可以很方便的進行操作。

 

BugHome版權所有丨轉載請注明出處:https://minei.me/archives/342.html





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM