在没有数据库/缓存的情况下重新启动后使用 Spring security 保留会话

问题描述 投票:0回答:1

我使用带有 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);
    }
}
java spring-mvc session tomcat spring-security
1个回答
0
投票

会话的大部分信息都存储在 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
。当您登录应用程序时,您将在数据库中存储新条目。

© www.soinside.com 2019 - 2024. All rights reserved.