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

Spring项目配置WebSecurity后出现ERR_TOO_MANY_REDIRECTS问题求助

问题分析与解决方案

问题根源

出现ERR_TOO_MANY_REDIRECTS的核心原因是重定向循环:
当你用ModelAndView设置viewName为"login.html"时,视图解析器会将其解析为新的HTTP请求路径/login.html,而该路径未在Spring Security的permitAll规则中放行。Spring Security拦截这个请求后,会重定向到/login要求认证;而/login的控制器又返回login.html,再次触发拦截重定向,形成无限循环。

而返回String类型的"loginUI"时,视图解析器执行服务器内部转发(不会发起新的HTTP请求),直接渲染对应视图文件,不会触发Spring Security的拦截规则,因此可以正常访问。

解决方案

方案1:统一视图名称格式(推荐)

将ModelAndView的viewName改成与String版本一致的名称(去掉.html后缀),让视图解析器按统一规则处理:

@GetMapping(value = "/login")
public ModelAndView loginUI(){
    ModelAndView loginUI = new ModelAndView();
    loginUI.setViewName("loginUI"); // 与String版本的视图名保持一致
    return loginUI;
}

确保视图文件(如loginUI.html)存在于视图解析器指定的目录(通常是src/main/resources/templates/)。

方案2:显式指定内部转发

如果需要保留login.html作为视图名,可以显式设置为内部转发,避免触发新的HTTP请求:

@GetMapping(value = "/login")
public ModelAndView loginUI(){
    ModelAndView loginUI = new ModelAndView();
    // 根据实际视图路径调整,比如模板文件在templates目录下
    loginUI.setViewName("forward:/templates/login.html");
    return loginUI;
}

方案3:放行视图路径(不推荐)

如果以上方案不适用,可以临时将/login.html加入Spring Security的放行规则,但这会暴露视图文件的直接访问路径,不符合安全规范:

http.authorizeHttpRequests()
    .requestMatchers("/assets/**").permitAll()
    .requestMatchers("/create-admin").permitAll()
    .requestMatchers("/login").permitAll()
    .requestMatchers("/login.html").permitAll() // 添加这一行
    .requestMatchers("/index/**").permitAll()
    // ... 其他规则保持不变

额外检查

  • 确认视图解析器配置正确,比如Thymeleaf默认前缀为classpath:/templates/,后缀为.html,确保视图文件路径与配置匹配。
  • 检查formLogin的failureForwardUrl设置为/login是正确的(转发而非重定向),不会额外触发循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:45:32