使用 Spring Boot 和嵌入式 Tomcat 启用会话持久性

2022-09-03 18:16:21

我正在开发一个带有Spring Boot和Spring Security的应用程序,方法是使用嵌入式Tomcat在Eclipse中启动Appplicat类。每次我重新启动服务器时,我的会话都会消失,我必须再次登录,这变得非常烦人。

是否可以在服务器重新启动之间保留会话?

我在Stackoverflow上看到了另一个问题,有人问了相反的问题,这让我觉得这实际上应该开箱即用:

如何通过管理器路径名在Spring Boot中禁用Tomact会话持久性?

我正在运行Spring Boot 1.2.1与Gradle。

顺便说一句,我知道Spring Loaded,但有时服务器重新启动是不可避免的。


答案 1

根据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 以在应用程序停止时序列化会话数据,并在应用程序重新启动时再次加载它。

持久会话是选择加入的;通过在可配置嵌入的ServletContainer上设置或使用属性。persistentSessionserver.session.persistent=true

修复 gh-2490


答案 2

我自己刚刚想通了这一点。每次启动应用程序时,Spring都会为Tomcat的基目录生成一个新的随机临时目录(例如)。由于它在每次启动时使用不同的文件夹,因此Tomcat无法恢复会话。/tmp/tmp/tomcat.5990562997404648887.8080

这可以通过使用 设置您自己的基目录来解决。但是,我不认为这是一个修复程序,因为它需要设置操作系统特定的目录,所以我打开了一个关于这个的错误:https://github.com/spring-projects/spring-boot/issues/2490server.tomcat.basedir=/tmp


推荐