You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Security无限重定向循环的原因及解决方法

Spring Boot 3.2.5集成Spring Security无限重定向循环问题排查与解决

问题原因

  • 授权规则不完整:securityFilterChain配置中,authorizeHttpRequests仅指定了匹配/demo/{id}路径,但未明确该路径的授权规则(如是否需要认证、是否允许匿名访问),Spring Security会默认拦截所有请求要求认证。
  • 自定义登录页配置缺失:配置了.loginPage("/login"),但既没有开放/login路径的匿名访问权限,也没有实现/login对应的请求处理接口。当访问/demo/{id}被拦截重定向到/login后,/login同样被拦截要求认证,触发重复重定向,形成无限循环。

解决方法

方法一:完善授权规则并实现登录页接口

修改Security配置类中的securityFilterChain方法,补充授权规则并允许登录路径匿名访问:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .authorizeHttpRequests((requests) -> requests
                    .requestMatchers("/demo/{id}").authenticated() // 指定/demo/{id}需要登录认证
                    .requestMatchers("/login").permitAll() // 允许匿名访问登录页
                    .anyRequest().permitAll() // 其他路径无需认证
            )
            .formLogin((form) -> form
                    .loginPage("/login") // 自定义登录页路径
                    .permitAll()
            )
            .logout((logout) -> logout.permitAll());

    return http.build();
}

同时在控制器中添加/login的处理逻辑(根据项目类型选择返回页面或JSON):

@RestController
public class DemoController {
    // 原有接口...
    
    @GetMapping("/login")
    public String login() {
        return "请访问登录页面进行认证"; // 或返回HTML页面模板名称
    }
}

方法二:使用Spring Security默认登录页

若无需自定义登录页,可移除.loginPage("/login")配置,使用框架提供的默认登录页面:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .authorizeHttpRequests((requests) -> requests
                    .requestMatchers("/demo/{id}").authenticated()
                    .anyRequest().permitAll()
            )
            .formLogin(form -> form.permitAll()) // 启用默认登录页并允许匿名访问
            .logout((logout) -> logout.permitAll());

    return http.build();
}

内容的提问来源于stack exchange,提问作者Kifsif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:54:59