Spring Security始终跳转默认登录页而非自定义登录页如何解决?
问题解决方法
你的自定义Spring Security配置未生效才会触发默认登录页,按以下顺序排查修复:
- 检查Security配置类的基础注解与继承关系
你的配置类必须添加@EnableWebSecurity注解,且继承WebSecurityConfigurerAdapter(Spring Security 5.7及以前版本),否则你重写的configure方法完全不会生效,直接走Spring Security默认配置。
示例配置类头:@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { // 你的configure方法放在此处 } - 修正权限匹配规则顺序错误
你当前配置里的antMatchers("/**").permitAll()会匹配所有路径,导致后续anyRequest().authenticated()完全失效,直接删除"/**"这个匹配规则即可,可额外补充登录路径放行避免拦截:.antMatchers( "/js/**", "/css/**", "/img/**", "/webjars/**", "/login" ).permitAll() - 补全UserDetailsService实现关系
你的UserServiceImpl实现的UserService接口,必须继承org.springframework.security.core.userdetails.UserDetailsService,否则Spring Security无法识别你自定义的用户校验逻辑,会 fallback 到默认配置。另外返回UserDetails时第三个权限参数不能传null,改为空列表即可:return new org.springframework.security.core.userdetails.User( user.getUserid(), user.getPassword(), AuthorityUtils.NO_AUTHORITIES ); - 确认自定义登录页表单配置正确
你的自定义login页面的表单提交地址必须是POST类型的/login,且用户名参数名默认为username,密码参数名默认为password,如果要自定义参数名/提交地址,需要在formLogin配置中补充:.formLogin() .loginPage("/login") .loginProcessingUrl("/custom/login") // 自定义表单提交地址 .usernameParameter("userid") // 自定义用户名参数名 .passwordParameter("pwd") // 自定义密码参数名 .defaultSuccessUrl("/", true) // 登录成功后默认跳转首页 .permitAll() - 检查包扫描范围
确认你的Security配置类、Controller、Service都在Spring Boot主启动类的同级或子包下,否则配置不会被扫描加载。
内容的提问来源于stack exchange,提问作者lakshman Kommula
相关产品推荐
相关产品推荐

