簡體   English   中英

使用Spring Boot和嵌入式Tomcat啟用會話持久性

[英]Enable session persistence with Spring Boot and embedded Tomcat

我正在使用嵌入式Tomcat在Eclipse中啟動Application類來開發Spring Boot和Spring Security的應用程序。 每次我重新啟動服務器時,我的會話都會消失,我必須再次登錄,這非常煩人。

是否可以在服務器重啟之間保持會話?

我在Stackoverflow上看到了另一個問題,其中有人問相反,這讓我覺得這應該是開箱即用的:

如何通過Manager路徑名禁用Spring Boot中的Tomact會話持久性?

我正在使用Gradle運行Spring Boot 1.2.1。

順便說一句,我知道Spring Loaded,但有時服務器重啟是不可避免的。

根據Spring,這將在1.3.0.M2修復 ,最終在1.3.0.RELEASE修復

然后,您要做的就是將以下行添加到application.properties文件中。

server.session.persistent=true

在最近的Spring版本中,這已被棄用並替換為:

server.servlet.session.persistent=true

參考https://github.com/spring-projects/spring-boot/issues/2490

更新Tomcat,Jetty和Undertow以在應用程序停止時序列化會話數據,並在應用程序重新啟動時再次加載它。

持續會議是選擇加入; 通過在ConfigurableEmbeddedServletContainer上設置persistentSession或使用屬性server.session.persistent=true

修復了gh-2490

我自己就是這么想的。 每次啟動應用程序時,Spring都會在/tmp為Tomcat的基本目錄生成一個新的隨機臨時目錄(例如/tmp/tomcat.5990562997404648887.8080 )。 由於它在每次啟動時使用不同的文件夾,因此Tomcat無法恢復會話。

這可以通過使用server.tomcat.basedir=/tmp設置您自己的基本目錄來解決。 但是,我不認為這是一個修復,因為它需要設置一個特定於操作系統的目錄,所以我打開了一個關於這個的錯誤: https//github.com/spring-projects/spring-boot/issues/2490

我通過使用Redis來保存會話信息解決了這個問題。

您需要做的就是在application.yml文件中指定一些選項:

server:
  servlet:
    session:
      persistent: true
spring:
  session:
    store-type: redis
  redis:
    host: localhost
    port: 6379
 ...

的build.gradle

    plugins {
       id 'java'
       id 'io.spring.dependency-management' version '1.0.6.RELEASE'
       id 'org.springframework.boot' version '2.1.3.RELEASE'
   }
    ...
    // Spring Framework
    compile(
            'org.springframework.boot:spring-boot-starter-web',
            'org.springframework.boot:spring-boot-starter-data-jpa',
            'org.springframework.data:spring-data-redis',
            'org.springframework.boot:spring-boot-starter-security'
    )
    ...

與Spring Boot 2.1.3完美配合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM