如何在 Maven 构建过程中删除/排除 Log4j?

snd*_*eli 5 java log4j maven spring-boot

您好,由于 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>
Run Code Online (Sandbox Code Playgroud)

这是标记中的错误

非常感谢您的帮助 在此输入图像描述

sou*_*ung 7

首先简单概述一下 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.17.1

建议您升级到2.17.0或更高版本

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

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

 <properties>
        <java.version>1.8</java.version>
        <log4j2.version>2.17.1</log4j2.version>
 </properties>
Run Code Online (Sandbox Code Playgroud)

https://snyk.io/blog/log4j-2-15-vulnerability-cve-2021-45046-ritic-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>
    
    Run Code Online (Sandbox Code Playgroud)