dubbo2.5.X 升级dubbo3.0.8—weblogic启动异常排查
Posted supingemail
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo2.5.X 升级dubbo3.0.8—weblogic启动异常排查相关的知识,希望对你有一定的参考价值。
好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.
目录
1.项目背景
最近手头上有个 6年前做的项目,使用的是 dubbo2.5.3 的dubbo。为什么要升级呐?因为在2020年2月13日,Apache Dubbo官方发布了一条反序列化漏洞(漏洞编号:CVE-2019-17564)的通告,漏洞等级中危(Apache Dubbo支持多种协议,官方推荐使用 Dubbo 协议,CVE-2019-17564是属于Apache Dubbo HTTP协议中的一个反序列化漏洞,该漏洞的主要原因在于当Apache Dubbo启用HTTP协议之后,Apache Dubbo在接受来自消费者的远程调用请求的时候存在一个不安全的反序列化行为,最终导致了远程任意代码执行。)
为什么现在才升级呐?这个可谓是一言难尽,难言之隐不可明说。此次升级,记录下升级过程。
2.为什么要写
2.1. 项目是打成的war包,使用是weblogic容器启动,走过弯路,出过很多差错;
2.2.项目是使用SpringMvc+dubbo的方式, 服务的编写都采用xml配置,而非注解形式。
2.3 项目升级完dubbo3.0.8后,在本地使用jetty跑没有任何问题,但是放入到weblogic测试环境上,就GG了,这里面的原因主要就是javassist引起的... ... 同时,这也提醒我们:在开发,测试,生产的环境一定要保持路线一致,否则各种莫名问题出来,影响进度。
3.漏洞受影响版本
2.7.0<= Apache Dubbo <= 2.7.4.1
2.6.0<= Apache Dubbo <= 2.6.7
Apache Dubbo = 2.5.x
4.升级项目中的依赖
把项目中的dubbo和zookeeper的引用全部删除掉,改用如下引用
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>3.0.8</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>3.0.8</version> <type>pom</type> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> <exclusion> <groupId>jline</groupId> <artifactId>jline</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.29.0-GA</version> </dependency>
5.修改配置文件中schema地址
旧版本dubbo的schema的地址是:http://code.alibabatech.com/schema/dubbo,dubbo重启后就捐给了apache基金会,地址就变成:http://dubbo.apache.org/schema/dubbo
需要将所有关于dubbo的生产者和消费者的xml文件中,配置都改成dubbo.apache,改完后如下图所示:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
6.添加配置
在生成者xml配置文件中,添加元数据和配置中心设置(dubbo升级后,将注册中心拆分为注册中心、配置中心和元数据中心,因此需要在服务提供者的配置文件中额外加上一行配置中心的配置,配置为zk的地址即可)
<dubbo:config-center address="127.0.0.1:2181" timeout="30000"/> <dubbo:metadata-report address="127.0.0.1:2181" timeout="30000"/>
在消费者配置文件中,添加:
<dubbo:metadata-report address="127.0.0.1:2181" timeout="30000"/>
7.weblogic 改动
weblogic 版本是12.1.3 ,在未升级前,weblogic启动是顺顺溜溜的,一点毛病都没有,但是,当你升级到3.0.8之后(后测试升级到2.7.x版本也是一样报错,2.6.x版本没有试),各种莫名其妙的错误就出来了,总的来说有,weblogic的启动日志错误有如下:
7.1 weblogic 启动找不到文件,其实目录,文件都在;
7.2 启动各种service类找不到,其实也都在配置文件中;
7.3 服务被占用,双重启动异常等等。
其实,这些问题,都归集到对javassist 上,因为它,才导致了这个weblogic的报错,在项目的weblogic.xml文件中,做如下配置:
<container-descriptor> <index-directory-enabled>true</index-directory-enabled> <prefer-web-inf-classes>false</prefer-web-inf-classes> <show-archived-real-path-enabled>true</show-archived-real-path-enabled> <prefer-application-packages> <package-name>org.apache.commons.lang.*</package-name> <package-name>antlr.*</package-name> <package-name>org.hibernate.*</package-name> <package-name>javax.persistence.*</package-name> <package-name>javax.validation.*</package-name> <package-name>org.apache.commons.pool.*</package-name> <package-name>org.slf4j</package-name> <!--新添加--> <package-name>javassist.*</package-name> </prefer-application-packages> </container-descriptor>
在dubbo的底层实现上,javassist占有绝对的分量。
8.注意事项
8.1 生产者和消费者的xml配置中,注意加入 <dubbo:config-center >和<dubbo:metadata-report>;
8.2 生产者和消费者中,每个服务都指定服务协议;
8.3 指定服务超时时间,个别需要超长服务的,超时时间需根据实际情况设置;
8.4 替换包名:将项目中使用到了包名为
com.alibaba.dubbo
的老版本dubbo类,然后统一替换为org.apache.dubbo
8.5
dubbo-dependencies-zookeeper包含的是zookeeper和curator-recipes,可能会与项目中其他地方引入的产生版本冲突,需要留意这类问题,如果是有冲突,需要手动排除依赖。
如此一来,就可以完成dubbo2的升级到dubbo3,并且在weblogic中完全启动。
可关注公众号:codingba ,一起学习提升
以上是关于dubbo2.5.X 升级dubbo3.0.8—weblogic启动异常排查的主要内容,如果未能解决你的问题,请参考以下文章
dubbo2.5.X 升级dubbo3.0.8—weblogic启动一直报错
[Dubbo3.0.8源码解析系列]-14-Dubbo配置加载全解析