You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot配置自定义错误页面不生效,禁用Whitelabel后仍显示Tomcat默认页

解决方案

第一步:回滚错误配置

你之前的三个方案失效的核心原因是主动排除了Spring Boot错误处理的自动配置,先做以下回滚:

  • 删除启动类上@EnableAutoConfiguration注解的exclude = {ErrorMvcAutoConfiguration.class}属性,恢复Spring Boot默认错误处理能力
  • 删除自定义的BazaarErrorController代码,删除application.yml中自定义的server.error.path配置

第二步:确认页面存放与依赖配置

  • 如果你使用模板引擎(如Thymeleaf),请确保pom.xml已引入spring-boot-starter-thymeleaf依赖,错误页放在resources/templates/error目录下;如果是纯静态HTML页面,统一放在resources/public/error目录下
  • 错误页命名保持为401.html、404.html、500.html、error.html(通用错误页)即可

第三步:调整Spring Security权限规则

触发浏览器下载弹窗的根因是Spring Security拦截了错误路径,导致响应头Content-Type未被正确设置为text/html,被浏览器识别为二进制文件。请在你的Spring Security配置类中添加错误路径放行规则:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        // 保留你原本的所有安全配置
        .authorizeRequests()
        .antMatchers("/error/**").permitAll() // 新增放行错误路径规则
        // 保留你原本的其他权限规则
        .and()
        .exceptionHandling()
        .authenticationEntryPoint(new RestAuthenticationEntryPoint()); // 原有认证入口点保持不变,无需修改
}

补充说明

  • 你之前用到的ErrorPage构造方法的字符串参数是Servlet转发路径,不是物理文件路径,会被DispatcherServlet路由到对应控制器/视图解析器处理
  • 如果需要自定义错误页匹配逻辑,保留你写的ErrorViewResolver Bean即可,无需额外配置ErrorPageRegistrar

做完以上配置后,触发错误时的流程会自动变为:

  1. RestAuthenticationEntryPoint调用sendError返回对应状态码
  2. Servlet容器捕获错误,转发到Spring Boot默认的/error路由
  3. 框架自动根据状态码匹配对应错误页返回,响应头Content-Type会被正确设置为text/html,不会触发下载弹窗

内容的提问来源于stack exchange,提问作者mrcoar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:36:03