snakeyaml1.x升级2.x导致项目启动报错

snakeyaml1.x升级2.x,修复漏洞

1.背景

在工作中,经常会有漏洞扫描,有一次看到了snakeyaml的漏洞:
在这里插入图片描述

项目框架:springBoot
版本:2.2.6.RELEASE

snakeyaml 中央仓库信息

snakeyaml中央仓库地址:https://mvnrepository.com/artifact/org.yaml/snakeyaml

目前中央仓库显示,1.x版本全有漏洞警告,可用版本只有2.x
在这里插入图片描述

3.修复漏洞:

修复方式如下: (此方法仅限springBoot 2.7.10及以上版本使用)
在这里插入图片描述

            <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>

如果你的SpringBootStarter版本在2.7.10以下,请继续看完下面内容

2.7.10版本以下的项目,仅做此排除和重新引入2.x依赖操作,那么项目会启动失败,你会得到以下两种启动报错:

报错一:

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
4.启动报错的原因:

snakeyaml 2.x版本去掉了Constructor和Representer两个类中的无参构造,但springBootStarter2.7.10以下版本会加载这个无参构造,所以项目启动会失败
在这里插入图片描述

5.解决办法:

1.升级springboot-starter至2.7.10及以上 (springBoot版本升级,考虑整个项目的影响,慎重)

2.重写这两个类,加上无参构造(本文解决方案)

原理:Java父子加载器,覆盖maven依赖jar包中的类。

若idea无法下载源码,参考以下github地址

snakeyaml源码gitHub参考地址:

https://github.com/snakeyaml/snakeyaml/blob/master/src/main/java/org/yaml/snakeyaml/representer/Representer.java

1.在src目录下按这两个类的路径建包,复制这两个类源代码,增加无参构造
在这里插入图片描述
在这里插入图片描述

做完此重写操作,即可修复升级2.x后不能启动的问题。

ps: 查看maven 依赖树结构命令
在idea命令窗口,执行: mvn dependency:tree
在这里插入图片描述

本文绑定附件:org.zip 。直接将org.zip解压,放在src目录下即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498660.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ETH开源PPO算法学习

前言 项目地址&#xff1a;https://github.com/leggedrobotics/rsl_rl 项目简介&#xff1a;快速简单的强化学习算法实现&#xff0c;设计为完全在 GPU 上运行。这段代码是 NVIDIA Isaac GYM 提供的 rl-pytorch 的进化版。 下载源码&#xff0c;查看目录&#xff0c;整个项目…

mongoose源码解读(二) -- mg_mgr_init 初始化

在用 mongoose 源码开发的时候&#xff0c;这个初始化函数 mg_mgr_init&#xff08;&#xff09;则是必须的&#xff0c;我们看下它到底做了哪些初始化操作。 void mg_mgr_init(struct mg_mgr *m, void *user_data) {struct mg_mgr_init_opts opts;memset(&opts, 0, sizeo…

力扣-移除元素

问题 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

深入Linux内核(进程篇)—进程切换之ARM体系架构 简单总结

context_switch函数完成Arm架构Linux进程切换&#xff0c;调用两个函数&#xff1a; 调用switch_mm() 完成用户空间切换&#xff0c;刷新I-CACHE&#xff0c;处理ASID和TLB&#xff0c;页表转换基址切换&#xff08;即把TTBR0寄存器的值设置为新进程的PGD&#xff09;&#xf…

java自动化之自动化框架项目(第四天-常用变量解析到map)

1.实现目标 常用变量解析到map&#xff0c;方便后面解析初始化sql或者入参的时候对变量进行替换 2.添加工具类 VariableUtil.java package com.syq.autotest.utils;import com.syq.autotest.entity.Variable; import org.apache.log4j.Logger;import java.util.HashMap; imp…

AI大模型 拍照搜题

最近&#xff0c;发现一款小程序【问智通】&#xff0c;实现了拍照搜题结合AI大模型&#xff0c;省去了打字和敲数学公式向AI提问&#xff0c;完美的补充了其它拍照搜题平台拍不到&#xff0c;没解析等不足&#xff01;&#xff01;&#xff01; 小程序码&#xff1a; APP下载…

map和set的简单介绍

由于博主的能力有限&#xff0c;所以为了方便大家对于map和set的学习&#xff0c;我放一个官方的map和set的链接供大家参考&#xff1a; https://cplusplus.com/ 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque&#x…

四、《任务列表案例》后端程序实现和测试

本章概要 准备工作功能实现前后联调 4.1 准备工作 数据库脚本 CREATE TABLE schedule (id INT NOT NULL AUTO_INCREMENT,title VARCHAR(255) NOT NULL,completed BOOLEAN NOT NULL,PRIMARY KEY (id) );INSERT INTO schedule (title, completed) VALUES(学习java, true),(学…

Tkinter.Text控件中,文本存在某个关键字的将被高亮显示(标记颜色+字体加粗)

在Tkinter的Text控件中&#xff0c;要标记某个关键字并改变其颜色&#xff0c;你可以使用tag_add方法来给包含关键字的文本添加标签&#xff0c;然后使用tag_config方法来配置该标签的显示样式&#xff0c;包括前景色&#xff08;字体颜色&#xff09;和背景色等。以下是一个完…

《2024年网络钓鱼现状全球报告》解读

文章目录 前言一、报告解读二、最常见的与员工相关的网络安全漏洞三、员工的网络安全“责任认知”四、真实的安全意识培训与钓鱼演练覆盖率不足前言 Proofpoint年度报告简述基于对15个国家的7500名终端用户和1050名网络安全专业人士的调研。难能可贵的是,本报告不仅基于主观调…

leetcode — 动态规划 — 打家劫舍、完全平方数

1 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…