我遇到了从未有过的奇怪状况。 我在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)
答案 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将返回到浏览器,并在下一个请求中使用,直到您关闭浏览器。