简单的spring boot tomcat版本升级
1. 需求
我们使用的springboot
版本为2.3.8.RELEASE
,对应的tomcat版本为9.0.41
,公司tomcat对应版本发现攻击者可发送不完整的POST请求触发错误响应,从而可能导致获取其他用户先前请求的数据,造成信息泄露的bug,行方要求对tomcat版本进行升级,受影响版本如下:
Apache Tomcat 9.0.0-M11 至 9.0.43
Apache Tomcat 8.5.7 至 8.5.63
由上所示,我们公司决定将tomcat升级一个小版本升级到9.0.44
版本,解决对应问题。
2.具体操作
具体操作分为如下几步
- 确定自己使用tomcat版本号,查看是否需要升级
- 移除tomcat错误版本编号,引入新的版本tomcat相关pom坐标
- 进行服务启动测试,查看版本编号是否修改成功
2.1 确定当前tomcat使用版本号
- 首先我们需要确定自己对应的tomcat版本编号,可以使用右键点击进入
spring-boot-starter-parent
- 然后再右键点击进入
spring-boot-dependencies
- 然后我们在里面发现tomcat引入的jar包,再次进行右键点击
spring-boot-starter-tomcat
- 最终发现
tomcat
版本为9.0.41
,版本在漏洞版本中,所以需要升级
- 具体升级版本
我们具体可以升级到设么版本,需要确定一下,可以使用maven的公共仓库mvnrepository
确定一下到底支持哪些版本,通过在仓库中搜索spring-boot-starter-tomcat
,找到对应的2.3.8.RELEASE版本,我们可以看到他的支持版本范围,具体访问地址
注意:确定当前版本信息也可以使用
maven
的dependences树状依赖,查看依赖关系,此处我已经修改完了所以展示的页面也是修改完之后正确的tomcat
版本
还可以使用maven冲突解决工具进行树结构查看,这里不多赘述了
2.2 移除starter-web模块对tomcat的依赖并引入新依赖
主要操作为pom文件中的starter-web,以及引入新的依赖,具体的pom文件如下所示,在maven对应的根pom中引入新版tomcat版本号 <tomcat.version>9.0.44</tomcat.version>
我们项目有一个common模块,他统一引入starter-web模块,我们修改此处即可,其他引用模块则自动更新tomcat
版本,具体pom
信息如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>credit-business</artifactId>
<groupId>cn.git</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>business-common</artifactId>
<description>公共模块,业务依赖基础模块,提供基础的技术和业务支撑</description>
<dependencies>
<!-- feign 调用通用interceptor,保证调用header token 值不丢失 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- tomcat 修复漏洞 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>${tomcat.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.git</groupId>
<artifactId>credit-swagger-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>cn.git</groupId>
<artifactId>credit-oracle-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.git</groupId>
<artifactId>credit-redis-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- ftp上传下载-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>cn.git</groupId>
<artifactId>credit-discovery-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
</dependencies>
</project>
2.3 测试
其实前面的maven树以及依赖树已经证实 tomcat
版本已经修改了,但是还是启动一下服务确定一下为好,那么再次启动服务,发现版本编号已经修改