Spring Boot+Spring Security自定义数据库持久化Remember-Me令牌无法生效问题求助
Spring Boot+Spring Security自定义数据库持久化Remember-Me令牌无法生效问题求助
兄弟,太懂你想给妈妈做个省心应用的心情了!关闭浏览器就丢会话确实闹心,你想用数据库持久化Remember-Me令牌实现长期登录的思路完全没问题,我帮你梳理下可能没踩对的点,你对照着检查:
1. 先确认SecurityConfig里的核心配置有没有补全
你贴的代码没写完,我给你补全Remember-Me的关键配置逻辑,这部分是核心:
@Configuration @EnableWebSecurity public class SecurityConfig { @Autowired private DataSource dataSource; // 注入你的数据库数据源 @Autowired private UserDetailsService userDetailsService; // 用来加载用户信息的服务 @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http // 先保留你原本的授权、登录页面配置 .authorizeHttpRequests(auth -> auth .requestMatchers("/public/**", "/login").permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .permitAll() ) // 重点:配置Remember-Me持久化逻辑 .rememberMe(remember -> remember .key("mom-app-secret-key-2024") // 这个密钥必须固定,重启应用不能改!否则旧令牌会失效 .tokenRepository(persistentTokenRepository()) // 指定用数据库存令牌 .userDetailsService(userDetailsService) // 验证令牌时用来加载用户 .tokenValiditySeconds(31536000) // 一年的秒数,正好符合你的需求 .useSecureCookie(false) // 本地HTTP测试时开这个,生产HTTPS环境可以改成true ); return http.build(); } // 配置数据库令牌仓库 @Bean public PersistentTokenRepository persistentTokenRepository() { JdbcTokenRepositoryImpl tokenRepo = new JdbcTokenRepositoryImpl(); tokenRepo.setDataSource(dataSource); // 第一次启动时打开下面这句,Spring会自动创建persistent_logins表,之后一定要注释掉! // tokenRepo.createTable(); return tokenRepo; } }
这里要注意:
key是令牌加密的密钥,必须固定死,改了的话之前生成的令牌全失效- 第一次启动时打开
tokenRepo.createTable(),生成数据库表后立刻注释,避免重复建表报错
2. 前端登录页面必须加正确的复选框
你妈妈用的登录JSP页面里,必须有一个**name为_remember-me**的复选框,Spring Security只认这个参数名:
<form action="/login" method="post"> <input type="text" name="username" placeholder="账号"> <input type="password" name="password" placeholder="密码"> <!-- 记住我复选框,name不能改! --> <input type="checkbox" name="_remember-me" id="remember"> <label for="remember">记住我,一年不用登录</label> <button type="submit">登录</button> </form>
如果这个参数没传,后端根本不会生成持久化令牌,这点很容易忽略!
3. 检查浏览器的Cookie设置
Chrome默认如果开了「关闭浏览器时清除Cookie」,会把所有Cookie清掉,包括Remember-Me的持久化Cookie。你可以让妈妈检查下:
Chrome设置 → 隐私和安全 → Cookie和其他网站数据,不要选「关闭所有窗口时清除Cookie和网站数据」
4. 验证数据库是否生成令牌记录
妈妈勾选「记住我」登录后,去数据库的persistent_logins表里看看有没有新增记录:
- 没有记录:说明前端复选框没传对参数,或者后端Remember-Me配置没生效
- 有记录但关闭浏览器仍需登录:大概率是密钥改了,或者浏览器清了Cookie,或者令牌验证逻辑出问题
如果还是不行,你可以把完整的SecurityConfig代码和登录页面代码贴出来,我帮你再精准排查!
备注:内容来源于stack exchange,提问作者Jhonny
相关产品推荐
相关产品推荐

