Apache log4j zookeeper使用易受RCE攻击的log4j 1.2。为了纠正此问题,我们计划排除log4j 1.2,并在依赖项中包含log4j 2.17.1核心和log4j 2.17.1 api
没有用。有人能建议如何从第三方库中排除jar吗
**错误:**获取此错误:线程“main”中出现异常java.lang.NoClassDefFoundError:由于以下原因造成的:(1)您的计算机上有一个或多个应用程序,您的计算机上有一个或多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上有多个应用程序,您的计算机上java.lang.ClassNotFoundException:在java.net中,您可以找到一个新的类加载器。
"我们试过了"
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.1-alpha</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.17.1</version>
</dependency>
</dependencies>
3条答案
按热度按时间wlzqhblo1#
Zookeeper显然试图直接访问Log4j 1.2内部类,这些类在
log4j-1.2-api
中已经不存在了(参见源代码)。您可以:
zookeeper.jmx.log4j.disable
设置为true
,HierarchyDynamicMBean
类的缺失。无论如何,您都应该升级,因为您正在使用的alpha版本有几个安全漏洞:参见Maven Repository。
zkure5ic2#
我想我已经弄明白了,但我还没有测试足够长的时间。
考虑到这是应用于v3.6.1 Zookeeper服务器,需要完成的工作总结如下:
1.从Zookeeper中删除旧的log4j库
1.添加最新的log4j库,该库修复了log 4shell漏洞。
1.与log4j1.x向后兼容的log4j 2桥:log4j-1.2-api-2.17.1.jar
1.必要的log4j库:log4j-api-2.17.1.jar与log4j-core-2.17.1.jar
/zookeeper/conf/server_jvm.properties
-Dlog4j.configuration=/incorta/IncortaAnalytics/IncortaNode/zookeeper/conf/log4j.properties
(log4j 2指向现有log4j1.x配置文件的指针,有关详细信息,请参阅下面的参考)-Dzookeeper.jmx.log4j.disable=true
(禁用Zookeeper对log4j1.x的JMX依赖。感谢Piotr为这个问题提供的提示)这样做的目的是保留Zookeeper附带的sl 4j库,因为将这些库更改为与log4j 2兼容的版本对我来说并不是一个愉快的经历。
相反,我将log4j1.x库升级到log4j 2,同时还拥有log4j桥库,以使Zookeeper的过时slf 4j库能够使用最新的log4j 2库。
Reference
**更新:**使用JDK 11时,我们遇到了一个奇怪的错误,Zookeeper客户端无法连接到Zookeeper,解决方案是从类路径中删除
slf4j-log4j12
绑定器。uyhoqukh3#
下面的依赖项配置似乎对我很有效: