如何在 Maven 构建期间 remove/exclude Log4j?

How to remove/exclude Log4j during maven build?

您好,由于 log4j 2.10 或更高版本中的漏洞问题,我们需要在我们的应用程序之一中删除上述 jar 文件。我已经在我的 pom.xml 中尝试过,但遇到了一些错误。我在构建 maven 项目方面没有太多经验:(

 <?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <name>assistant</name>
    <description>Assistant</description>
    
    <groupId>com.assistant</groupId>
    <artifactId>assistant</artifactId>
    <packaging>war</packaging>
    <version>2.0.2</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>font-awesome</artifactId>
            <version>5.7.2</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- WORDPRESS DEPENDENCIES START-->
        <dependency>
            <groupId>org.kamranzafar.spring.wpapi</groupId>
            <artifactId>spring-wpapi-client</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- WORDPRESS DEPENDENCIES END -->
        
         
    </dependencies>
    
    

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
                    <excludes>
                        <exclude>
                            <groupId>log4j</groupId>
                            <artifactId>log4j</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
        
    </build>

</project>

这是标记中的错误

非常感谢您的帮助

首先简要概述一下 log4j 最近的漏洞。

  • Log4J 2.15.0存在严重漏洞CVE-2021-44228(远程代码执行)
  • Log4J 2.16.0存在严重漏洞CVE-2021-44228(远程代码执行)
  • Log4J 2.16.0 也存在漏洞 CVE-2021-45105(DoS 漏洞)
  • 编辑: log4j-api-2.17.0 和上存在 CVE-2021-44832 漏洞 log4j-to-slf4j-2.17.0 上的 CVE-2021-44832 漏洞。但是这2 漏洞并不严重。还是建议升级 到 2.17.1

建议升级到2.17.0以上版本.

此版本 (2.17.0) 包含针对两个远程代码执行漏洞(最新的 DoS 漏洞)的安全修复程序。

您正在使用 spring-boot-starter-web。 因此,升级到 log4j 2.17.1 的一个好方法是通过 spring 启动依赖管理。只需覆盖 pom.xml 属性部分中的 log4j 版本(无需在插件或依赖项部分中执行任何操作):

 <properties>
        <java.version>1.8</java.version>
        <log4j2.version>2.17.1</log4j2.version>
 </properties>

https://snyk.io/blog/log4j-2-15-vulnerability-cve-2021-45046-critical-ace/


如果您真的只想排除 log4j 依赖项(这样您可能不会丢失所有日志记录功能,除非您用另一个日志记录框架替换 log4j):

  1. 执行 maven 命令mvn dependency:tree

  2. 这将显示 Maven 依赖层次结构。所以你只需要 排除不需要的依赖项。例如:

      <dependencies>
        ...
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>log4j-to-slf4j</artifactId>
                    <groupId>org.apache.logging.log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        ...
    
    </dependencies>