spring boot tomcat版本升級(jí)的實(shí)現(xiàn)示例
1. 需求
我們使用的springboot版本為2.3.8.RELEASE,對(duì)應(yīng)的tomcat版本為9.0.41,公司tomcat對(duì)應(yīng)版本發(fā)現(xiàn)攻擊者可發(fā)送不完整的POST請(qǐng)求觸發(fā)錯(cuò)誤響應(yīng),從而可能導(dǎo)致獲取其他用戶先前請(qǐng)求的數(shù)據(jù),造成信息泄露的bug,行方要求對(duì)tomcat版本進(jìn)行升級(jí),受影響版本如下:
Apache Tomcat 9.0.0-M11 至 9.0.43
Apache Tomcat 8.5.7 至 8.5.63
由上所示,我們公司決定將tomcat升級(jí)一個(gè)小版本升級(jí)到9.0.44版本,解決對(duì)應(yīng)問題。
2.具體操作
具體操作分為如下幾步
- 確定自己使用tomcat版本號(hào),查看是否需要升級(jí)
- 移除tomcat錯(cuò)誤版本編號(hào),引入新的版本tomcat相關(guān)pom坐標(biāo)
- 進(jìn)行服務(wù)啟動(dòng)測試,查看版本編號(hào)是否修改成功
2.1 確定當(dāng)前tomcat使用版本號(hào)
首先我們需要確定自己對(duì)應(yīng)的tomcat版本編號(hào),可以使用右鍵點(diǎn)擊進(jìn)入spring-boot-starter-parent

然后再右鍵點(diǎn)擊進(jìn)入spring-boot-dependencies

然后我們?cè)诶锩姘l(fā)現(xiàn)tomcat引入的jar包,再次進(jìn)行右鍵點(diǎn)擊spring-boot-starter-tomcat

最終發(fā)現(xiàn)tomcat版本為9.0.41,版本在漏洞版本中,所以需要升級(jí)

具體升級(jí)版本
我們具體可以升級(jí)到設(shè)么版本,需要確定一下,可以使用maven的公共倉庫mvnrepository確定一下到底支持哪些版本,通過在倉庫中搜索spring-boot-starter-tomcat,找到對(duì)應(yīng)的2.3.8.RELEASE版本,我們可以看到他的支持版本范圍,具體訪問地址

注意:確定當(dāng)前版本信息也可以使用maven的dependences樹狀依賴,查看依賴關(guān)系,此處我已經(jīng)修改完了所以展示的頁面也是修改完之后正確的tomcat版本

還可以使用maven沖突解決工具進(jìn)行樹結(jié)構(gòu)查看,這里不多贅述了

2.2 移除starter-web模塊對(duì)tomcat的依賴并引入新依賴
主要操作為pom文件中的starter-web,以及引入新的依賴,具體的pom文件如下所示,在maven對(duì)應(yīng)的根pom中引入新版tomcat版本號(hào) <tomcat.version>9.0.44</tomcat.version>

我們項(xiàng)目有一個(gè)common模塊,他統(tǒng)一引入starter-web模塊,我們修改此處即可,其他引用模塊則自動(dòng)更新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>公共模塊,業(yè)務(wù)依賴基礎(chǔ)模塊,提供基礎(chǔ)的技術(shù)和業(yè)務(wù)支撐</description>
<dependencies>
<!-- feign 調(diào)用通用interceptor,保證調(diào)用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 修復(fù)漏洞 -->
<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 測試
其實(shí)前面的maven樹以及依賴樹已經(jīng)證實(shí) tomcat版本已經(jīng)修改了,但是還是啟動(dòng)一下服務(wù)確定一下為好,那么再次啟動(dòng)服務(wù),發(fā)現(xiàn)版本編號(hào)已經(jīng)修改

到此這篇關(guān)于spring boot tomcat版本升級(jí)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)spring boot tomcat版本升級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot項(xiàng)目動(dòng)態(tài)指定配置文件的方法示例
SpringBoot 作為 Java 開發(fā)中一個(gè)非常流行的框架,以其簡化配置和快速啟動(dòng)應(yīng)用而聞名,在開發(fā)過程中,我們經(jīng)常需要根據(jù)不同的環(huán)境來加載不同的配置文件,本文給大家介紹了SpringBoot項(xiàng)目動(dòng)態(tài)指定配置文件的方法示例,需要的朋友可以參考下2024-12-12
使用Spring?Boot快速構(gòu)建一個(gè)簡單的文件處理工具
在現(xiàn)代Web應(yīng)用中,文件上傳與處理是常見的需求,本文將通過一個(gè)實(shí)際案例,詳細(xì)介紹如何使用Spring?Boot構(gòu)建一個(gè)文件處理工具,感興趣的小伙伴可以參考一下2025-06-06
Java異常處理之try...catch...語句的使用進(jìn)階
這篇文章主要介紹了Java異常處理之try...catch...語句的使用進(jìn)階,重點(diǎn)在于牽扯相關(guān)IO使用時(shí)的資源調(diào)配情況,需要的朋友可以參考下2015-11-11
Java實(shí)現(xiàn)JS中的escape和UNescape代碼分享
在PHP和Python中都有類似JS中的escape和UNescape函數(shù)的功能,那么Java語言中到底有沒有類似的方法呢?本文就來介紹一下Java實(shí)現(xiàn)JS中的escape和UNescape轉(zhuǎn)碼方法,需要的朋友可以參考下2017-09-09
springboot接口接收數(shù)組及多個(gè)參數(shù)的問題及解決
這篇文章主要介紹了springboot接口接收數(shù)組及多個(gè)參數(shù)的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
@RequestController之?dāng)?shù)據(jù)源與連接池使用及說明
文章總結(jié):介紹了Spring MVC中的@Controller和@ResponseBody注解以及@RequestMapping注解的使用方法,詳細(xì)講解了數(shù)據(jù)源、連接池的概念及其在Java項(xiàng)目中的應(yīng)用,包括JNDI、DBCP、C3P0和Druid等連接池的配置和特點(diǎn)2026-01-01

