配置自定义登录页后Spring Security出现ERR_TOO_MANY_REDIRECTS错误
解决Spring Boot + Spring Security自定义登录页重定向过多问题
问题根源
出现ERR_TOO_MANY_REDIRECTS的核心原因有两个:
- 自定义登录页路径无控制器映射:配置了登录页为
/loginPage,但没有对应控制器处理该请求,访问时被Spring Security判定未授权,又重定向回登录页,形成循环。 - 用户角色配置错误:
User.builder().roles()方法接受字符串类型角色名(如"ADMIN"),而非枚举对象集合,会导致角色解析异常,间接引发权限拦截逻辑异常。
修复步骤
1. 添加登录页控制器
创建控制器类,映射/loginPage请求返回登录视图:
@Controller public class LoginController { @GetMapping("/loginPage") public String showLoginPage() { return "login"; // 对应Thymeleaf模板文件名(假设模板名为login.html) } }
2. 修正SecurityConfig中的用户角色配置
将roles(Set.of(Role.ADMIN,Role.OWNER))改为传入枚举的字符串名称:
@Bean public InMemoryUserDetailsManager userDetailsManager(PasswordEncoder passwordEncoder) { User user = User.builder() .username("Admin") .password(passwordEncoder.encode("password123")) .roles(Role.ADMIN.name(), Role.OWNER.name()) .build(); return new InMemoryUserDetailsManager(user); }
3. 确认SecurityFilterChain配置
现有配置逻辑正确,确保/loginPage和/authenticateTheUser已开放匿名访问:
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(configure -> configure .requestMatchers("/loginPage", "/authenticateTheUser", "/resources/**").permitAll() .anyRequest().authenticated()) .formLogin(form -> form .loginPage("/loginPage") .loginProcessingUrl("/authenticateTheUser") .defaultSuccessUrl("/", true) .permitAll()); return http.build(); }
验证修复
启动应用后,访问任意需授权页面,会自动跳转至/loginPage显示自定义登录页,输入正确用户名密码后可正常进入首页,重定向循环问题解决。
内容的提问来源于stack exchange,提问作者Asou Safari
相关产品推荐
相关产品推荐

