Spring Boot无法映射login/register页面返回404 Whitelabel错误如何解决
Spring Boot访问视图路径404排查方案
根路径/可正常渲染index页面,说明Thymeleaf starter引入正常、视图解析器基础配置无问题,按以下优先级排查即可:
1. 优先核对视图文件的命名与存放位置
这是最高发的问题点:
- 打开
src/main/resources/templates目录,确认两个文件命名完全匹配:必须为全小写的login.html、register.html,不能出现首字母大写、后缀错误(如Login.html/login.htm)、文件名带前后空格的情况。 - 确认两个文件直接存放在templates根目录,没有被放到templates的子文件夹(如
templates/page/)下。
注意:Windows系统文件名大小写不敏感,Linux/macOS默认大小写敏感,哪怕本地测试没问题,只要文件名大小写错了,部署后必然404。
2. 排查路径拦截、映射冲突问题
- 检查项目是否引入Spring Security依赖:如果引入了,默认安全规则会拦截请求,同时自带的
/login登录页逻辑会和自定义视图映射冲突,需要手动配置放行+关闭默认登录页:
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/login", "/register").permitAll() .anyRequest().authenticated() .and() .formLogin().disable(); } }
- 检查项目中是否存在自定义拦截器(HandlerInterceptor)、过滤器(Filter),确认拦截规则中已经将
/login、/register加入放行列表,没有被拦截逻辑提前阻断。 - 全局搜索代码中所有
@RequestMapping、@GetMapping、@PostMapping注解,确认没有其他Controller类定义了同路径的映射(比如其他接口写了@GetMapping("/login")返回JSON数据),同路径重复映射会导致视图解析逻辑被覆盖。 - 检查
src/main/resources/static、src/main/resources/public等静态资源目录下,是否存在命名为login/register的文件或文件夹,静态资源映射优先级高于Controller视图映射,如果同名静态资源不存在,会直接返回404,不会进入Controller的方法逻辑。
3. 确认请求映射是否正常加载
如果上面两步都没排查出问题,打开请求映射日志,确认两个接口是否被Spring正确注册:
- 在application.yml中添加日志配置:
logging: level: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: trace
- 重启项目,在启动日志中搜索
/login、/register:- 如果能搜到对应映射条目:说明Controller逻辑正常,问题出在视图文件本身,回到第一步重新核对文件位置、命名、文件权限。
- 如果搜不到对应映射条目:检查Controller类上是否标注了正确的
@Controller注解(不要错写为@RestController,否则会直接返回"login"字符串,不会走Thymeleaf视图解析),确认两个方法上的@RequestMapping路径拼写正确,没有多余斜杠或拼写错误。
内容的提问来源于stack exchange,提问作者Jastino_Parata
相关产品推荐
相关产品推荐

