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

Spring Security 6.0.0 requestMatchers配置致重定向循环及免登URL咨询

问题解答

1. requestMatchers() 与 antMatchers() 的关系

Spring Security 6.0 中antMatchers()被标记为过时,推荐用requestMatchers()替代。二者核心功能兼容,都支持Ant风格路径匹配(比如/info/**匹配/info下所有子路径),但requestMatchers()灵活性更强:

  • 可同时兼容多种请求匹配器(如AntPathRequestMatcher、MvcRequestMatcher、正则匹配器等)
  • 支持指定HTTP方法(例如requestMatchers(HttpMethod.GET, "/login"))
  • 贴合框架现代配置风格,后续版本会持续扩展其能力

简言之,你之前用antMatchers()写的路径规则,直接替换成requestMatchers()就能无缝迁移。

2. 解决重定向循环(ERR_TOO_MANY_REDIRECTS)问题

你遇到的循环重定向,本质是访问/login时仍被要求认证,导致反复跳转。结合你的配置,问题大概率出在**/login路径没有实际页面/控制器支持**,或者匹配规则存在疏漏,具体修复步骤:

步骤1:确保/login路径可正常访问

Spring Security仅负责拦截请求并跳转,不会自动生成登录页面。你需要为/login提供对应的视图或控制器:

@Controller
public class LoginController {
    @GetMapping("/login")
    public String loginPage() {
        // 返回登录页视图名,比如对应templates/login.html(Thymeleaf场景)
        return "login";
    }
}

同时确保模板引擎(如Thymeleaf)已正确配置,能找到对应的登录页面文件。

步骤2:优化安全配置细节

你的现有配置逻辑没问题,可做细节优化避免潜在匹配问题:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(requests -> requests
                    // 明确放行首页、登录页、info下所有路径的请求
                    .requestMatchers("/", "/login", "/info/**").permitAll()
                    // 其余请求必须认证
                    .anyRequest().authenticated()
            )
            .formLogin(form -> form
                    // 指定自定义登录页路径
                    .loginPage("/login")
                    // 放行所有登录相关请求(含POST提交表单)
                    .permitAll()
                    // 可选:配置登录成功后跳转路径
                    .defaultSuccessUrl("/dashboard", true)
            )
            .logout(logout -> logout
                    .permitAll()
                    // 可选:配置登出成功后跳转路径
                    .logoutSuccessUrl("/")
            );

        return http.build();
    }
}

步骤3:排查其他潜在问题

  • 若登录页用到静态资源(如CSS、JS),需将这些路径也加入permitAll,比如requestMatchers("/css/**", "/js/**").permitAll(),否则静态资源被拦截可能间接引发循环问题。
  • 检查是否存在其他过滤器/拦截器干扰请求流程,导致/login被错误拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:55:19