Tomcat8版本以上配置自定义400错误页面

问题:当请求URL包含特殊字符时,Tomcat会自动拦截并返回400状态码页面,暴露了tomcat的版本信息,这是很严重的安全漏洞。

java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

解决办法:

  1. 屏蔽打印的异常和Tomcat版本信息,在Tomcat -> conf -> server.xml中加入如下配置:
xml 复制代码
`<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />`

再次请求就只会打印一个标题了,屏蔽了重要信息。

  1. 重定向到自定义的400_error.html页面,在Tomcat -> conf -> server.xml中加入如下配置:
xml 复制代码
<Valve className="org.apache.catalina.valves.ErrorReportValve" errorCode.400="webapps/ROOT/400_error.html"/>

在webapps -> ROOT项目下新建一个自定义的HTML页面,例如我的是400_error.html

再次请求就会重定向到你的自定义页面了。

参考大佬的文章链接:
tomcat8 url包含|等特殊字符报错400的问题
tomcat9 400错误无法跳转

相关推荐
BerryS3N几秒前
Java在人工智能与大模型时代的深度演进:从工程落地、高性能计算到企业级Agent与RAG架构实战指南
java·人工智能·架构
蔬菜_16 分钟前
前端转全栈-day2(修饰符)
java
fīɡЙtīиɡ ℡19 分钟前
怎么是用JWT
java·状态模式
唐青枫27 分钟前
Java JCommander 实战详解:用注解解析命令行参数
java
步行cgn1 小时前
carList.forEach(System.out::println)
java·开发语言·mybatis
plainGeekDev1 小时前
JUnit 4 → JUnit 5 + Kotlin
android·java·kotlin
plainGeekDev1 小时前
Mockito → MockK
android·java·kotlin
Zane19942 小时前
ThreadLocal 与 BlockingQueue:线程本地变量的内存泄漏原理,以及阻塞队列怎么选?
java·后端
用户3126874877202 小时前
Spring Bean 生命周期到底经历了什么?从实例化到销毁的全链路拆解
java·spring boot
Flittly2 小时前
【我的手搓轮子日记】(2)handmade-ioc 手搓 IOC 容器
java·spring boot·spring