Spring Boot3升级Redis索引会话:登录失败及重定向循环问题
Spring Boot 3.0.0升级中的Spring Security会话与认证问题
升级背景
将Spring Boot项目从2.7.5版本升级至3.0.0版本,核心工作为替换已废弃的WebSecurityConfigurerAdapter,开发语言为Kotlin(不影响组件运行)。
基础配置
新旧版本的安全配置类中,均声明了如下Autowired字段及对应Bean:
@Autowired private lateinit var sessionRepository: FindByIndexNameSessionRepository<out Session> @Bean fun sessionRegistry(): SessionRegistry { return SpringSessionBackedSessionRegistry(sessionRepository) }
初始启动问题
最初应用无法启动,Spring无法注入sessionRepository,将@EnableRedisHttpSession替换为@EnableRedisIndexedHttpSession后问题解决。
登录失败问题
当前无法正常登录系统,怀疑与Redis会话管理相关:
- 可正常加载登录页并提交登录请求,日志显示认证成功
- 重定向到主页后
authentication为null,Redis中无该用户的认证记录
迁移前后SecurityFilterChain中的会话配置对比:
迁移前
.sessionManagement().sessionFixation().migrateSession().and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED).maximumSessions(1).sessionRegistry(sessionRegistry()).expiredUrl("/api/v1/logout").and()
迁移后
.sessionManagement { ssm -> ssm.sessionFixation { it.migrateSession() } ssm.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) .maximumSessions(1).sessionRegistry(sessionRegistry()).expiredUrl("/api/v1/logout") }
仅修改了pom.xml和安全配置类,未改动其他业务代码,询问缺失哪些配置以实现认证持久化。
更新1:调整注解后的情况
调整安全配置类注解如下:
@Configuration @EnableWebSecurity @EnableSpringHttpSession @EnableRedisIndexedHttpSession(redisNamespace = "admindev:session", flushMode = FlushMode.IMMEDIATE, saveMode = SaveMode.ALWAYS) class SecurityConfiguration(
提升Spring Security日志级别后,日志无异常信息,但会话令牌仍无法找到。
更新2:无限重定向循环问题
按相关方案调整后可访问前端,但后端登录时陷入无限重定向循环:
- 应用尝试跳转到error/4xx页(因后端无"/"链接,属于预期行为)
- 随后被会话过期页重定向,又因已登录状态跳转回"/",循环往复
相关异常处理配置如下:
http.exceptionHandling { e -> e.authenticationEntryPoint(LoginRedirectHandler()) } //... class LoginRedirectHandler : LoginUrlAuthenticationEntryPoint("/login") { override fun determineUrlToUseForThisRequest( request: HttpServletRequest, response: HttpServletResponse, exception: AuthenticationException? ): String { return "${this.loginFormUrl}?error=timeout&requestedUrl=${request.requestURL}" } }
询问该行为变化的原因。
内容的提问来源于stack exchange,提问作者Nick Sherrill
相关产品推荐
相关产品推荐

