当前位置: 首页 > news >正文

springboot自定义404页面

添加配置类

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.Servlet;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.valves.ErrorReportValve;
import org.apache.coyote.UpgradeProtocol;
import org.springframework.beans.BeansException;
import  org.springframework.beans.factory.config.BeanPostProcessor;
import  org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import  org.springframework.boot.autoconfigure.web.embedded.TomcatWebServerFactoryCustomizer;
import  org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import org.springframework.util.FileCopyUtils;
import lombok.extern.slf4j.Slf4j;
@ConditionalOnClass({ Servlet.class, Tomcat.class,  UpgradeProtocol.class,  TomcatWebServerFactoryCustomizer.class })
@Component
@Slf4j
public class TomcatCustomizerBeanPostProcessor implements  BeanPostProcessor {@Overridepublic Object postProcessAfterInitialization(Object  bean, String beanName) throws BeansException {if (bean instanceof  ConfigurableTomcatWebServerFactory) {ConfigurableTomcatWebServerFactory  configurableTomcatWebServerFactory =  (ConfigurableTomcatWebServerFactory) bean;addTomcat404CodePage(configurableTomcatWebServerFactory);}return  BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);}private static void  addTomcat404CodePage(ConfigurableTomcatWebServerFactory  factory) {factory.addContextCustomizers((context) -> {String tomcatTempPath =  context.getCatalinaBase().getPath();log.info("tomcat目录:{}", tomcatTempPath);String path = tomcatTempPath + "/404.html";ClassPathResource cr = new  ClassPathResource("404.html");if (cr.exists()) {File file404 = new File(path);if (!file404.exists()) {try {FileCopyUtils.copy(cr.getInputStream(), new FileOutputStream(file404));} catch (IOException e) {e.printStackTrace();}}}ErrorReportValve valve = new  ErrorReportValve();valve.setProperty("errorCode.404", path);valve.setShowServerInfo(false);valve.setShowReport(false);valve.setAsyncSupported(true);context.getParent().getPipeline().addValve(valve);});}
}

在resources文件夹下直接添加404.html文件,再次启动测试,发现404页面已修改

http://www.lryc.cn/news/212823.html

相关文章:

  • C/C++数据结构之时间复杂度和空间复杂度详细解析以及力扣刷题
  • 【需要理解】80 单词搜索
  • 笔记本电脑的键盘鼠标如何共享控制另外一台电脑
  • 【计算机网络】(谢希仁第八版)第二章课后习题答案
  • 笔记软件Notability mac中文版软件功能
  • 【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性
  • Springmvc 讲解(1)
  • 超级英雄的导航之旅:动态路由和嵌套路由
  • 发现个好玩的 Windows微信对话框换行
  • Vue3最佳实践 第八章 ESLint 与 测试 ( Jest )
  • 【抓包分析】通过ChatGPT解密还原某软件登录算法实现绕过手机验证码登录
  • 【UE】属性同步,源码详解一个勾选了Actor复制的Actor第一次被创建时经历了什么
  • Spring中Bean的完整生命周期!(Bean实例化的流程,Spring后处理器,循环依赖解释及解决方法)附案例演示
  • AcWing第 127 场周赛 - AcWing 5283. 牛棚入住+AcWing 5284. 构造矩阵 - 模拟+快速幂+数学
  • 2023-10-31 游戏开发-微信小游戏-文档记录
  • 2023NOIP A层联测21-异或
  • 分布式存储系统Ceph应用组件介绍
  • 【数据结构】数组和字符串(十一):字符串的定义与存储(顺序存储、链式存储及其C语言实现)
  • zk-Bench:SNARKs性能对比评估工具
  • 【Linux】NTP服务器配置、时间修改
  • 毕业设计基于SpringMVC+Mybatis+Bootstrap的电影院管理系统源码+数据库
  • vantUI(Tabbar标签页)浏览器返回上一页的失效问题
  • 【算法】Prim算法(求最小生成树)
  • go语言,yaml实现简单的workflow工作流
  • BaiduMallServcie
  • vue3+jsx+antd的插槽写法之一
  • Shell 学习之 if 命令
  • android 同步 服务器 时间
  • 10、电路综合-基于简化实频的宽带匹配电路设计方法
  • N-130基于springboot,vue校园社团管理系统