跟随Spring Boot登录注册教程开发时默认登录页抢占首页如何解决
问题根因
项目引入spring-boot-starter-security依赖后,Spring Security默认会开启全局请求认证校验,未显式放行首页路径的情况下,所有匿名访问都会被自动重定向到Spring Security内置的登录页面,这是你当前被拦截的核心原因。
排查及解决步骤
- 第一步:确认依赖引入情况
先检查你的pom.xml(Maven)或build.gradle(Gradle)是否已引入Spring Security依赖,这是触发默认登录拦截的前提。 - 第二步:添加Spring Security路径放行配置(你大概率遗漏了该步骤)
创建Spring Security配置类,显式放行首页等不需要登录就能访问的公开路径,两种适配不同版本的配置方式如下:注意:你参考的教程第5步已包含该配置,漏加配置、路径匹配规则写错都会导致首页被拦截
第一种:适配Spring Security 5.6及以下旧版本:
第二种:适配Spring Security 5.7及以上新版本(@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() // 按你的实际路径调整,放行首页、注册、登录相关公开路径 .antMatchers("/", "/home", "/register", "/login").permitAll() .anyRequest().authenticated() .and() // 后续做自定义登录时可配置自己的登录页路径 .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll(); } }WebSecurityConfigurerAdapter已废弃):@Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests() .requestMatchers("/", "/home", "/register", "/login").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll(); return http.build(); } } - 第三步:校验MVC控制器配置
确认你的首页映射路径和放行路径一致,示例配置如下:@Controller public class MainController { @GetMapping("/") public String home() { // 此处返回你的自定义首页视图名,比如对应templates下的index.html return "index"; } } - 临时快速验证方案
如果你只是想暂时关闭所有安全校验、快速验证首页功能,可以在application.properties/application.yml中添加如下配置(仅测试用,正式环境请勿使用):spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
注意事项
- 放行路径要和你的实际接口路径完全匹配,否则依然会触发拦截
- 配置类必须加
@Configuration注解,否则Spring不会加载该配置 - 配置不生效时优先检查启动类的组件扫描范围是否包含配置类所在的包
内容的提问来源于stack exchange,提问作者Ben Sosteric
相关产品推荐
相关产品推荐

