Provides transitive vulnerable dependency maven 提示依赖存在漏洞问题的解决方法

问题描述

如下图所示,对于 java 项目某些依赖,IDEA 提示,引用了含有漏洞的依赖。如果是单个依赖,可以考虑直接升级版本即可。但是对于传递性依赖,比如 flink 项目中,依赖的部分模块,它们自己依赖了一些含有漏洞的依赖,应该如何解决呢 ?(现实开发环境更新flink版本往往会带来非常多的麻烦和较大的风险)

解决方法

根据提示,找到提示包含漏洞的依赖包,然后前往 https://mvnrepository.com/ 搜索最新的依赖包。注意一定要查询一下是否兼容

步骤 1:使用 exclusion 排除有漏洞的依赖

xml 复制代码
<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.smileyan</groupId>
    <artifactId>hello-flink-1.18</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <flink.version>1.18.1</flink.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients</artifactId>
            <version>${flink.version}</version>
            <scope>provided</scope>
            <!-- 解决传递性依赖 vulnerable 问题 -->
            <exclusions>
                <exclusion>
                    <groupId>commons-io</groupId>
                    <artifactId>commons-io</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.commons</groupId>
                    <artifactId>commons-compress</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 解决传递性依赖 vulnerable 问题 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.18.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.27.1</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>
</project>

更新后,记得重新加载 maven 依赖。

如果设置线上的 flink 环境,建议上传无漏洞版本的依赖到 flink-1.18.1/lib 目录下。flink 在启动任务的时候,将会自动优先加载 这个目录下的依赖,而不是加载默认的以前的老版本依赖。

即使用新的无漏洞版本的依赖,并且 scope 去除 provided ,如下图所示:

这里还有一个地方需要注意,添加打包插件(在 project 级别下添加)

xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.6.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <createDependencyReducedPom>false</createDependencyReducedPom>
                <!-- 根据实际情况设置是否 minimizeJar -->
<!--                    <minimizeJar>true</minimizeJar>-->
            </configuration>
        </plugin>
    </plugins>
</build>

总结

之前写了篇博客 rovides transitive vulnerable dependency maven:commons-collections 有两位小伙伴评论,认为博客中提到的解决方案是 "掩耳盗铃"。哈哈哈哈,当时能想到的仅仅是这样了。

多谢那两位小伙伴的提醒,多谢多谢 @zyfhongyang @zhongyilangren

通过本文提到的方法,可以较好的解决 "传递性依赖存在漏洞" 的解决方法,并且针对于 flink 应用,这里根据能否编辑 flink 环境给出了两个解决方案以供选择。

希望能帮到各位小伙伴 ~ 万分感谢各位的点赞、评论与关注支持 ~

相关推荐
大不点wow3 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
噢,我明白了3 小时前
Java中日期和字符串的处理
java·开发语言·日期
dkbnull4 小时前
Spring Boot请求处理组件对比详解
java·spring boot
jun_bai4 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器
顺风尿一寸4 小时前
记一次 Spring AOP 与定时任务引发的死锁排查
java
用户446139430274 小时前
从单体到微服务:我们项目的拆分思路和踩坑记录
java
TDengine (老段)4 小时前
TDengine 免费版说明
java·大数据·数据库·物联网·时序数据库·tdengine
码上有光4 小时前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
学计算机的计算基5 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana25 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode