snakeyaml從1.x升級2.x的方案

一、背景

因公司漏洞掃描,發現SnakeYAML 反序列化漏洞(CVE-2022-1471),所以要求對SnakYaml進行升級。

因項目中未直接引用snakyaml包,經分析是springboot引用的這個包。但是在這個項目中,springboot用的版本是2.3.12.RELEASE版本。這個版本引用的snakyaml的版本是1.26版本。

二、修復方案

基于上面的背景,對snakyaml升級有兩種方案。

2.1 方案一:直接升級springboot

如果可以直接升級springboot,升級到里面snakyaml里面是2.*版本的一個版本即可。

因為對snakyaml只有2.*版本才沒有漏洞。參加下圖:

如果想詳細查看,請參考如下路徑:

?https://mvnrepository.com/artifact/org.yaml/snakeyaml

2.2 方案二:升級snakyaml到2.0

?

但是如果你將springboot低版本的snakyaml排查掉,直接引用新包的話,啟動項目會報錯。

如下方式:

?

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version><exclusions><exclusion><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId></exclusion></exclusions>
</dependency><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>2.0</version>
</dependency>

啟動項目會報錯誤,錯誤信息如下:

java.lang.NoSuchMethodError: org.yaml.snakeyaml.constructor.Constructor: method <init>()V not found
java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: method <init>()V not found

報錯的原因是:

snakeyaml 2.x版本去掉了Constructor和Representer兩個類中的無參構造,但springBootStarter2.7.10以下版本會加載這個無參構造,所以項目啟動會失敗。

解決方案:

重寫這兩個類,加上無參構造

原理:Java父子加載器,覆蓋maven依賴jar包中的類。

將snakyaml源碼下載到本地,修改源碼,然后自己打包,項目中引用直接構建的jar即可。

源碼下載地址:

https://bitbucket.org/snakeyaml/snakeyaml/src/snakeyaml-2.0/

再項目中修改這兩個類,修改后的結果,分別見下圖所示:

?增加標紅框的兩個方法,然后重新構建打包即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/34992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/34992.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/34992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

睡眠剝奪對記憶鞏固的神經生物學影響

近期&#xff0c;《自然》雜志刊載的研究揭示了睡眠不足對記憶相關神經信號的不利影響&#xff0c;強調了即使在后續恢復充分睡眠的情況下&#xff0c;這種損害亦難以完全逆轉。 神經元作為大腦的基本功能單位&#xff0c;其活動并非孤立進行&#xff0c;而是通過復雜的網絡連接…

QT拖放事件之四:自定義拖放操作-利用QDrag來拖動完成數據的傳輸-案例demo

1、核心代碼 #include "Widget.h" #include "ui_Widget.h" #include "MyButton.h"Widget::Widget(QWidget *parent): QWidget

CSS3 分頁

CSS3 分頁 分頁是網頁設計中常見的一種布局方式&#xff0c;它允許將內容分布在多個頁面中&#xff0c;從而提高用戶體驗和網站的可管理性。CSS3 提供了多種靈活的方式來設計分頁&#xff0c;使得開發者能夠創建既美觀又實用的分頁導航。本文將詳細介紹如何使用 CSS3 來創建和…

python 正則表達式提取字符串

以某個字符開始、某個字符結束&#xff0c;期待的提取結果包含首末字符串 提取公式&#xff1a;a re.findall(“開始字符串.*末字符串”,str) 以某個字符開始、某個字符結束&#xff0c;期待的提取結果不包含末字符串&#xff0c;但包含首字符串 提取公式&#xff1a;a re.…

Cesium--旋轉3dtiles

以下代碼來自Cesium 論壇&#xff1a;3DTileset rotation - CesiumJS - Cesium Community 在1.118中測試可行&#xff0c;可直接在Sandcastle中運行&#xff1a; const viewer new Cesium.Viewer("cesiumContainer", {terrain: Cesium.Terrain.fromWorldTerrain()…

機器學習課程復習——線性回歸

Q&#xff1a;回歸和分類的區別&#xff1f; 回歸是連續的&#xff0c;分類是離散的 Q:用最小二乘法對線性回歸模型進行參數估計思路 例題

排序。。。

1. 掌握常用的排序方法&#xff0c;并掌握用高級語言實現排序算法的方法&#xff1b; 2. 深刻理解排序的定義和各種排序方法的特點&#xff0c;并能加以靈活應用&#xff1b; 3. 了解各種方法的排序過程及其時間復雜度的分析方法。 編程實現如下功能&#xff1a; &#xff08;1…

Makefile中error函數的用法

在 Makefile 中&#xff0c;error 函數是一個特殊的函數&#xff0c;用于在執行過程中生成一個錯誤消息并終止 Makefile 的執行。它的基本語法如下&#xff1a; $(error error-message)其中&#xff0c;error-message 是一個字符串&#xff0c;表示要顯示的錯誤消息。當 Makef…

vue+three.js渲染3D模型

安裝three.js: npm install three 頁面部分代碼&#xff1a; <div style"width: 100%; height: 300px; position: relative;"><div style"height: 200px; background-color: white; width: 100%; position: absolute; top: 0;"><div id&…

【繞過無限Debugger】

文章目錄 引言無限Debugger的工作原理繞過無限Debugger的常用技巧條件斷點法置空法代碼修改與加密 引言 在Web開發中&#xff0c;debugger語句是一種強大的JavaScript功能&#xff0c;允許開發者在代碼中設置斷點&#xff0c;便于調試和理解代碼執行流程。然而&#xff0c;這一…

【文末附gpt升級秘笈】程序的“通用性”與“過度設計”的困境

程序的“通用性”與“過度設計”的困境 四、解決方案的深入闡述 &#xff08;一&#xff09;明確需求和目標&#xff1a;需求驅動設計 在軟件開發的初期&#xff0c;我們需要與業務團隊緊密合作&#xff0c;深入了解項目的實際需求和目標。這不僅包括明確的功能需求&#xf…

filelist中+incdir+的用法

在大多數 Verilog 編譯器&#xff08;如 VCS、ModelSim/Questa、Verilator&#xff09;中&#xff0c;使用 incdir 選項指定包含路徑后&#xff0c;仍然需要在 filelist 文件中列出每一個 Verilog 源文件。incdir 選項僅告訴編譯器在特定目錄中查找頭文件&#xff08;例如 .vh …

go語言day4 引入第三方依賴 整型和字符串轉換 進制間轉換 指針類型 浮點數類型 字符串類型

Golang依賴下載安裝失敗解決方法_安裝go依賴超時怎么解決-CSDN博客 go安裝依賴包&#xff08;go get, go module&#xff09;_go 安裝依賴-CSDN博客 目錄 go語言項目中如何使用第三方依賴&#xff1a;&#xff08;前兩步可以忽略&#xff09; 一、安裝git&#xff0c;安裝程序…

linux學習week1

linux學習 一.介紹 1.概述 linux的讀法不下10種 linux是一個開源的操作系統&#xff0c;操作系統包括mac、windows、安卓等 linux的開發版&#xff1a;Ubuntu&#xff08;烏班圖&#xff09;、RedHat&#xff08;紅帽&#xff09;、CentOS linux的應用&#xff1a;linux在服…

歸并排序與快速排序總結-c++

一&#xff0c;歸并排序 歸并排序&#xff08;Merge sort&#xff09;是建立在歸并操作上的一種有效的排序算法。該算法分治法&#xff08;Divide and Conquer&#xff09;的一個非常典型的應用。 作為一種典型的分而治之思想的算法應用&#xff0c;歸并排序的實現由兩種方法…

KVM網絡模式設置

一、KVM網絡模式介紹 1、NAT ( 默認上網 ) 虛擬機利用host機器的ip進行上網,對外顯示一個ip;virbr0是KVM 默認創建的一個 Bridge,其作用是為連接其上的虛機網卡提供NAT訪問外網的功能,默認ip為192.168.122.1 2、自帶的Bridge 將虛擬機橋接到host機器的網卡上,vm和ho…

mysql如何一句實現二行數據的列對換?

二行數據相同列內容對換 思路&#xff1a;先用多表聯查的方式查詢出這二行數據&#xff0c;再將查詢改成修改語句&#xff0c;需要對換的列相互設置值。 //查詢 SELECT * fromser_ele_detail AS rule1JOIN ser_ele_detail AS rule2 ON ( rule1.account_no rule2.account_no …

240622_昇思學習打卡-Day4-ResNet50遷移學習

240622_昇思學習打卡-Day4-ResNet50遷移學習 我們對事物的認知都是一點一點積累出來的&#xff0c;往往借助已經認識過的東西&#xff0c;可以更好地理解和認識新的有關聯的東西。比如一個人會騎自行車&#xff0c;我們讓他去騎摩托車他也很快就能學會&#xff0c;比如已經學會…

使用容器部署redis_設置配置文件映射到本地_設置存儲數據映射到本地_并開發java應用_連接redis---分布式云原生部署架構搭建011

可以看到java應用的部署過程,首先我們要準備一個java應用,并且我們,用docker,安裝一個redis 首先我們去start.spring.io 去生成一個簡單的web項目,然后用idea打開 選擇以后下載 放在這里,然后我們去安裝redis 在公共倉庫中找到redis . 可以看到它里面介紹說把數據放到了/dat…