Spring / IntelliJ不会在停止时清除会话数据

时间:2018-12-22 10:18:23

标签: spring spring-boot ubuntu intellij-idea

我遇到了从未有过的奇怪状况。 我在ubuntu 18的intelliJ上运行了一个spring boot应用程序。

我的spring boot应用程序在连接到内存数据库中h2的开发环境中运行。我使用Spring Security进行了基于会话的登录。

奇怪的是,如果在我停止并重新启动应用程序后仍可以登录。即使我完全重新启动IntelliJ,也无法清除该会话。即使数据库保持其状态,也不会丢失。
只有重新启动整个系统,所有内容才会清除。

在我的application.properties内部,没有设置任何特殊属性。 一切都处于默认状态。

如果我停止应用程序,则会显示以下控制台输出:

2018-12-22 11:11:19.385  INFO 10000 --- [      Thread-35] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@73abcbfa: startup date [Sat Dec 22 11:11:00 CET 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@12e6f48a
2018-12-22 11:11:19.391  INFO 10000 --- [      Thread-35] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2018-12-22 11:11:19.391  INFO 10000 --- [      Thread-35] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans
2018-12-22 11:11:19.395  INFO 10000 --- [      Thread-35] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2018-12-22 11:11:19.395  INFO 10000 --- [      Thread-35] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed drop of schema as part of SessionFactory shut-down'
2018-12-22 11:11:19.415  WARN 10000 --- [      Thread-35] o.s.b.f.support.DisposableBeanAdapter    : Invocation of destroy method failed on bean with name 'inMemoryDatabaseShutdownExecutor': org.h2.jdbc.JdbcSQLException:Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-197]
2018-12-22 11:11:19.417  INFO 10000 --- [      Thread-35] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2018-12-22 11:11:19.419  INFO 10000 --- [      Thread-35] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Process finished with exit code 130 (interrupted by signal 2: SIGINT)

2 个答案:

答案 0 :(得分:1)

https://github.com/spring-projects/spring-boot/wiki/spring-boot-1.3.0-m3-release-notes

  

在以下情况下更新Tomcat,Jetty和Undertow以序列化会话数据:   应用程序停止并在应用程序重新加载   重新启动。永久会话是可选的;通过设置   ConfigurableEmbeddedServletContainer上的persistentSession或   使用属性server.session.persistent = true(永久会话   默认情况下是通过Devtools启用的。)

在Spring Boot 2中,属性为:

server.servlet.session.persistent=false # Whether to persist session data between restarts.

答案 1 :(得分:0)

我想您正在谈论通过浏览器(或REST客户端)进行Web登录。另外,我想您正在使用默认的网络安全设置。 然后,您的登录请求将创建一个具有会话ID的cookie,该cookie将返回到浏览器,并在下一个请求中使用,直到您关闭浏览器。