当前位置: 首页 > 知识库问答 >
问题:

如何使用log4j2版本覆盖log4j,以解决apache-core_2.12版本的“易反序列化的SocketServer类”

云俊美
2023-03-14

如何覆盖log4j版本1.2。17带有log4j核心2.16。0版本以解决spark-core_2.12二进制文件的“易反序列化的SocketServer类”。

我试图排除log4j-1.2。17来自spark-core_2.12,但构建失败,出现以下错误

java.lang.NoClassDefFoundError: org/apache/log4j/spi/Filter
    at com.optum.iqs.runtime.counters.CountersFactoryTest.setup(CountersFactoryTest.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.spi.Filter
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 19 more

java.lang.NullPointerException
    at com.optum.iqs.runtime.counters.CountersFactoryTest.tearDown(CountersFactoryTest.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.RunAfters.invokeMethod(RunAfters.java:46)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

我的CountersFactoryTest.java类内容是

    package com.optum.iqs.runtime.counters;
    
    import java.io.IOException;
    import java.util.Map;
    import org.apache.spark.sql.Dataset;
    import org.apache.spark.sql.Encoders;
    import org.apache.spark.sql.SparkSession;
    import org.junit.AfterClass;
    import org.junit.Assert;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class CountersFactoryTest {
        public static SparkSession sparkSession;
    
        @BeforeClass
        public static void setup() throws IOException {
            sparkSession = SparkSession.builder().appName("JunitSession").master("local").getOrCreate();
            CountersFactory.initialize(sparkSession.sparkContext());
        }
    
        @Test
        public void testIqsLongCounter() {
            Dataset<String> input = sparkSession.read().textFile("src/test/resources/input.txt").as(Encoders.STRING());
            Dataset<String> output = input.map(new SampleMapFunction(), Encoders.STRING());
            output.show();
            Long counter = CountersFactory.getCounters().get("input records").value();
            Assert.assertEquals(3L, counter.longValue());
        }
        
        @Test
        public void testIqsOutputRecordCounter() {
            Dataset<String> input = sparkSession.read().textFile("src/test/resources/input.txt").as(Encoders.STRING());
            Dataset<String> output = input.map(new SampleMapFunctionOutputCounter(), Encoders.STRING());
            output.show();
            Map<String, Long> counter = CountersFactory.getOutputCounters().get("output records").value();
            Assert.assertEquals(3L, counter.get("key").longValue());
        }
    
        @AfterClass
        public static void tearDown() {
            sparkSession.stop();
        }
    }

从火花核心依赖中排除log4j的参考

<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

spark core是否将log4j依赖项升级到最新版本?

CVE-2019-17571

共有1个答案

燕成双
2023-03-14

[备注:CVE-2019-1751几乎不可能触发,除非您明确运行SocketServer(参见此问题)。另一方面,Log4j 1.2.17也会受到CVE-2021-4104,这可能更容易利用。]

从log4j2开始。x与Log4j 1.2不向后兼容升级并不像用一个库替换另一个库那么简单。您需要用log4j1.2和log4j2之间的桥替换log4j依赖关系。x API(log4j-1.2-API):

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.0.1</version>
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.16.0</version>
</dependency>

这应该可以解决ClassNotFoundException,但是如果您想实际将日志保存到某个地方,则需要为Log4j 2安装后端。x APIlog4j core是标准配置。

 类似资料:
  • 我试图获得基于gradle的android项目的覆盖面。 所以我为我的应用程序添加版本。gradle 和 内部调试。 这工作正常。我可以获取使用或的报告。 问题是调试版本通常被开发人员用来运行和测试应用程序。因此,在构建中启用代码覆盖可能会降低构建的速度,这种用法可能不需要。 所以我想我会添加新的配置 不幸的是,没有和不运行覆盖类型。 当我使用dex2jar反编译apk并使用jd-gui查看内部时

  • 问题内容: 我使用的是Apache Mina sshd- core版本0.10.0。由于文件上传的一些问题,我不得不将版本更改为0.14.0。在那里我无法覆盖getVirtualUserDir()方法。以下是我的示例代码, 我想知道如何在Apache Mina sshd-core版本0.14.0中克服该问题。谢谢。 问题答案: Mina SSHD 0.10.0中的目的是设置文件系统的初始目录。 在

  • 我的父模块中的Spring Boot版本是v2.1.17。发布 然后我在子模块中引入了spring boot starter安全性,指定的版本是2.4.4,它覆盖了父模块中的版本(v2.1.17版本)。 然后,我运行了命令,发现子模块中spring-boot-starter-security的版本确实是2.4.4,但spring-boot-starter-security中引用的artifactI

  • 问题内容: 我想使用NPM软件包。它具有各种依赖性。依赖图的一部分如下所示: 不幸的是,此版本中存在一个错误,导致该错误无法在Mac OS X上正确安装。此问题已在最新版本中修复。 如何获得更新版本的? 一些其他上下文: 明确要求版本为,明确要求版本为。 首先添加到我程序包的依赖项没有任何作用;这两个版本均已安装,并且仍使用旧版本 问题答案: 您可以使用npm收缩包装功能,以覆盖任何依赖性或子依赖

  • 问题内容: 我正在使用Oracle的OEPE发行版(包括Weblogic服务器10.3.5)开发Web应用程序。WLS包含自己的Spring版本,该版本似乎是2.5.6.SEC01。但是,我们正在尝试使用3.1发行版的Spring和Spring Security功能。 Maven POM将Spring Version定义为属性3.1.1.RELEASE(该属性已插入各节中,即: 我在weblogi

  • 我正在使用Oracle的OEPE发行版开发一个Web应用程序,包括Weblogic服务器10.3.5。WLS包括它自己的Spring版本,似乎是2.5.6。SEC01。但是,我们正在尝试使用特定于3.1版本的Spring和Spring Security功能。 Maven POM将Spring版本定义为3.1.1.RELEASE属性(该属性插入到部分中,即: 我已经尝试了两种不同的方法来weblog