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

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

相关推荐
Juchecar3 分钟前
Spring是Java语境下的“最优解”的原因与启示
java·spring·node.js
邪恶喵喵3 分钟前
Tomcat和负载均衡
java·tomcat·负载均衡
尼古拉斯·纯情暖男·天真·阿玮3 分钟前
动态规划——子序列问题
java·算法·动态规划
代码不停9 分钟前
Java中文件操作和IO
java
夏天的味道٥11 分钟前
IDEA 开发工具常用插件整理
java·ide·intellij-idea
勇者无畏40427 分钟前
基于 Spring AI Alibaba 搭建 Text-To-SQL 智能系统(初始化)
java·后端·spring
一枚懒人33 分钟前
Java的Lamdba语法和函数式编程理解
java
土豆南瓜饼41 分钟前
关于mybatis-plus的一些默认配置
java
Juchecar42 分钟前
Java示例:设计模式是如何在实战中“自然生长”出来
java·设计模式
能摆一天是一天44 分钟前
JAVA Function
java