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.mzph.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…