Spring Security 6.0集成自定义登录页出现过多重定向问题求助
问题分析与解决方案
你的自定义登录页出现过多重定向的核心原因有两个:
1. 登录请求映射冲突
LoginController中使用@RequestMapping("/login")处理登录页面,该注解默认匹配所有HTTP请求方法(GET、POST等),而Spring Security的loginProcessingUrl("/login")也会处理POST请求的登录提交。两者同时处理POST /login请求,导致逻辑冲突,触发循环重定向。
2. 注册错误返回路径异常
注册表单验证失败时,你返回了"/registration"(带斜杠的绝对路径),这可能导致视图解析器路径解析异常,间接引发重定向问题。
修复步骤
步骤1:限定登录页面的请求方法
将LoginController中的@RequestMapping("/login")修改为@GetMapping("/login"),让它只处理GET请求(用于展示登录页面),POST请求完全交给Spring Security处理:
@Controller public class LoginController { @Autowired private UserService userService; // 仅处理GET请求,展示登录页 @GetMapping("/login") public String loginForm() { System.out.println(1); return "login"; } // ... 其他代码保持不变 }
步骤2:修正注册错误返回的路径
将注册方法中验证失败时的返回路径从"/registration"改为"registration"(去掉开头的斜杠,使用相对路径):
@PostMapping("/registration") public String registration( @Valid @ModelAttribute("user") UserDto userDto, BindingResult result, Model model) { User existingUser = userService.findByEmail(userDto.getEmail()); if (existingUser != null) result.rejectValue("email", null, "User already registered !!!"); if (result.hasErrors()) { model.addAttribute("user", userDto); // 使用相对路径返回注册页 return "registration"; } userService.save(userDto); return "redirect:/registration?success"; }
步骤3:(可选)优化SecurityConfig的路径匹配
可以将SecurityConfig中的路径匹配更明确,避免不必要的模糊匹配:
@Bean protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ http.csrf().disable() .authorizeHttpRequests((requests) -> requests // 明确允许注册相关请求 .requestMatchers("/registration", "/registration?success").permitAll() // 允许登录页面访问 .requestMatchers("/login").permitAll() .requestMatchers("/user/**").hasAnyRole("USER", "ADMIN") .requestMatchers("/admin/**").hasAnyRole("ADMIN") .anyRequest().authenticated() ) .formLogin((form) -> form .loginPage("/login").permitAll() .loginProcessingUrl("/login") .defaultSuccessUrl("/user/") ) .logout((logout) -> logout.permitAll()) .exceptionHandling().accessDeniedPage("/access-denied"); return http.build(); }
完成以上修改后重启项目,登录页的重定向问题即可解决。
内容的提问来源于stack exchange,提问作者suyoung07
相关产品推荐
相关产品推荐

