[英]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.