我使用带有 MVC 和 Spring Security 的 Spring Boot 3.2.5。目前,如果应用程序重新启动,用户必须重新登录。据我所知,Tomcat 能够通过在
server.servlet.session.persistent=true
中设置 application.properties
来保持会话。为了进行测试,我制作了一个最简单的应用程序(见下文)。但是,它不起作用。如果我另外设置了server.servlet.session.store-dir=sessions
,那么在我停止应用程序后会创建文件夹sessions
,但它是空的。用户仍然需要重新登录。我做错了什么,还是不可能?
应用程序属性
server.servlet.session.persistent=true
server.servlet.session.store-dir=sessions
应用程序控制器
@Controller
public class AppController {
@GetMapping("/")
@ResponseBody
public String index() {
return "logged in";
}
}
应用配置
@Configuration
public class AppConfiguration
{
@Bean
public UserDetailsService users() {
var admin = User.withDefaultPasswordEncoder()
.username("admin").password("password").roles("USER", "ADMIN").build();
return new InMemoryUserDetailsManager(admin);
}
}
会话的大部分信息都存储在 Redis 或 Hazelcast 中。
就您而言,更好的想法是将有关会话的信息存储在数据库中。
添加适当的依赖项:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
另外,更新
application.properties
:
spring:
session:
jdbc:
initialize-schema: always
table-name: SPRING_SESSION
它应该创建 2 个数据库:
spring_session
和 spring_session_attributes
。当您登录应用程序时,您将在数据库中存储新条目。