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 环境给出了两个解决方案以供选择。

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

相关推荐
我喜欢山,也喜欢海29 分钟前
Jenkins Maven 带权限 搭建方案2025
java·jenkins·maven
kaikaile199531 分钟前
Jenkins集成Maven
servlet·jenkins·maven
明天更新36 分钟前
Java处理压缩文件的两种方式!!!!
java·开发语言·7-zip
铁锚41 分钟前
一个WordPress连续登录失败的问题排查
java·linux·服务器·nginx·tomcat
yychen_java1 小时前
上云API二开实现三维可视化控制中心
java·无人机
理智的煎蛋1 小时前
keepalived+lvs
java·开发语言·集成测试·可用性测试
CopyLower1 小时前
Java与AI技术结合:从机器学习到生成式AI的实践
java·人工智能·机器学习
生命不息战斗不止(王子晗)1 小时前
mybatis中${}和#{}的区别
java·服务器·tomcat
.生产的驴1 小时前
Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
java·运维·数据库·spring·docker·容器·maven
橙子199110162 小时前
Kotlin 中的 Unit 类型的作用以及 Java 中 Void 的区别
java·开发语言·kotlin