参考资料:
参考文章https://blog.csdn.net/u011482647/article/details/122101243
实现原理:
- 根据JVM加载规则,jar包中引用的第三方jar包,和直接从pom文件或者直接导入存储的路径是一样的,就比如下面的例子:
- 我们引入了seata包,里面内嵌了阿里巴巴的fastJson包
- ?seata包中的程序,需要fastJSON就会到com.alibaba.fastJson目录下找本项目引用的版本
?
- ?但是由于fastJson1.2.83以下的版本有安全漏洞,所以我们需要将seata中的fastJson进行升级,我们只需要将这个低版本的去掉,然后引入一个高版本的即可
- ?这样并不会影响到seata以及整个项目的使用,因为他们都是在com.alibaba.fastjson文件夹下寻找的
总结:总而言之,即使是jar包引用的其他第三版jar包,也是独立的,可替换的,无论谁加载的路劲都是一样的。
实际问题:
- 最近fastJson和LogBack相继爆出安全漏洞,老板也让我们抓紧修复,fastJson修复方法同上,logBack的修复方法,参考一位老哥的,见参考资料
- 过程是:
- (1)先将logback的上游jar包剃掉,通常是:spring-boot-starter-logging
?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j-api</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j-to-slf4j</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<exclusions>
<exclusion>
<artifactId>logback-core</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
- 另外提一句,IDEA的依赖树,内嵌的对于查找某个jar很好用,新窗口的查找太好用?
?
?
|