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
相关产品推荐
相关产品推荐

