Dubbo Gateway 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Dubbo Gateway 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Dubbo Gateway 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发网络工具包
开源组织
地区 国产
投 递 者 kalman03
适用人群 未知
收录时间 2022-03-21

软件简介

Dubbo Gateway是一个基于Java语言的Dubbo网关实现。基于Dubbo注册中心的元数据,通过将HTTP请求转换为Dubbo协议,泛化调用的方式返回请求结果。它具有如下的特性:

  1. 使用简单,开箱即用,非常适用于一些接口测试场景;
  2. 灵活可拓展。通过Interceptor的实现,可非常方便实现熔断、限流、路由、定制响应、用户授权等功能。系统也内置了部分Interceptor实现;
  3. 支持仅调用声明为对外开放的Dubbo服务,安全保证。(基于Feature:apache/dubbo#7660 );
  4. 文档自动化生成。基于Javadoc标准的dubbo对外接口生成系统,API写好即可生成文档,同时集成了阿里云OSS,全程仅需几步参数配置,即可可视化预览文档。

Requirements

服务提供者Dubbo 版本:Dubbo 2.7.14+ 或 Dubbo 3.x

Java 版本:1.8+

Guides

以Springboot项目方式,启动Dubbo Gateway网关:

1、添加依赖

新建Springboot工程,添加Dubbo Gateway的核心依赖:

<dependency>
	<groupId>com.kalman03</groupId>
	<artifactId>gateway-core</artifactId>
	<version>1.2.0</version>
</dependency>

当然,还需要添加Dubbo的注册中心依赖,以Zookeeper为例:

<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>${zookeeper_version}</version>
	<exclusions>
		<exclusion>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-framework</artifactId>
	<version>${curator_version}</version>
</dependency>
<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-recipes</artifactId>
	<version>${curator_version}</version>
</dependency>

2、参数配置

gateway.netty.server.port=80
gateway.netty.server.host=127.0.0.1
gateway.netty.server.connect-timeout=3000
gateway.netty.business.thread-count=50
gateway.dubbo.registry.address=zookeeper://127.0.0.1:2181
gateway.dubbo.openservice=true

3、启动服务

@SpringBootApplication
@EnableAutoConfiguration
public class DubboGatewayTest {

	public static void main(String[] args) {
		try {
			SpringApplication.run(DubboGatewayTest.class, args);
		} catch (Throwable e) {
			e.printStackTrace();
		}
	}

    //可选自定义拦截器
	@Component
	@Order(100)
	@InterceptorRule(routeRuleType = RouteRuleType.PATH, excludePatterns = { "/api/**" })
	class CustomInterceptor implements HandlerInterceptor {
		@Override
		public boolean preHandle(GatewayHttpRequest request, GatewayHttpResponse response) throws Exception {
			System.out.println("preHandle");
			return true;
		}
		@Override
		public void afterCompletion(GatewayHttpRequest request, GatewayHttpResponse response, Exception ex)
				throws Exception {
			System.out.println("afterCompletion");
		}
	}
}

4、访问目标服务

系统内置了PATH路由MIX路由,也同时支持自定义路由实现。下面演示如何通过不同的路由规则访问对应的服务。

  • PATH路由(推荐)

    PATH路由是系统内置默认的路由,也是系统推荐的路由规则,其拥有较多适用性(既可正常调用,也可以满足一些第三方系统的调用要求,比如支付消息回调等),路由规则如下

    HTTP URL:

    http(s)://{domain}:{port}/{appName}/{interfaceName}/{method}/{group}/{version}
    

    HTTP Body (payload or form-data):

    {
      "id": 23,
      "username": "testUser"
    }
    
  • MIX路由

    考虑到有些参数相对于固定不变,且暴露在URL中不尽友善,系统内置了一种MIX的路由规则,将部分路由参数以Header的参数形式进行传递。

    HTTP URL:

    http(s)://{domain}:{port}/{interfaceName}/{method}
    

    HTTP Header:

    x-app-name={appName}
    x-group={group}
    x-version={version}
    x-route-rule=mix
    

    HTTP Body (payload or form-data):

    {
      "id": 23,
      "username": "testUser"
    }
    
  • CUSTOM自定义路由

    CUSTOM路由专为一些对PATH路由MIX路由都不满意的开发者准备,只需要继承AbstractRouteHandlerInterceptor 类,即可轻松实现自定义的路由规则。

Param Transmission

用户端通用参数(诸如请求UA/Referer/IP等)以及Token用户信息等,需要传递到服务提供方。Dubbo Gateway与服务提供者之间内置的参数传递走Dubbo的RpcContext。

Dubbo网关内置了gatewayConsumerFiltergatewayProviderFilter,可作为Dubbo服务提供者的默认Filter实现,通过该Filter可获取用户端请求的一些参数以及自定义拦截器封装的参数。当然,开发者也可自行在服务提供方读取RpcContext中的传递参数。

更多使用方式,参考:gateway-samples  gateway-samples-provider

Attention

Dubbo Gateway对Dubbo服务提供者提供的对外服务有一条要求:只能有一个服务入参,且为对象类型(非普通Java数据类型)

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
JDOM 代码问题漏洞
XXE
从 2.0.6 到 JDOM 中的 SAXBuilder 中的 XXE 问题允许攻击者通过精心设计的 HTTP 请求导致拒绝服务。
CVE-2021-33813 MPS-2021-8350
2022-08-08 18:06
fastjson < 1.2.83 任意代码执行漏洞
反序列化
Fastjson 是Java语言实现的快速JSON解析和生成器。 fastjson 使用黑白名单用于防御反序列化漏洞,1.2.80及以下版本在特定条件下可绕过默认autoType关闭限制,攻击远程服务器。 攻击者可利用该漏洞远程执行恶意代码。
CVE-2022-25845 MPS-2022-11320
2022-08-08 18:06
Logback-core 存在输入验证不恰当漏洞
输入验证不恰当
ch.qos.logback:logback-core 是一个 logback-core 模块。此软件包的受影响版本容易受到主机名验证不足的影响。 X.509 未正确验证。通过通过看似有效的证书欺骗 TLS/SSL 服务器,具有拦截网络流量(例如,MitM、DNS 缓存中毒)能力的攻击者可以泄露和选择性地操纵传输的数据。
MPS-2022-12411
2022-08-08 18:06
Apache Tomcat 环境问题漏洞
HTTP请求的解释不一致性(HTTP请求私运)
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat存在环境问题漏洞,该漏洞源于Apache Tomcat 在某些情况下没有正确解析 HTTP 传输编码请求标头,导致在与反向代理一起使用时可能会请求走私。
CVE-2021-33037 MPS-2021-9711
2022-08-08 18:06
Apache Zookeeper 授权问题漏洞
授权机制缺失
Apache Zookeeper是美国阿帕奇(Apache)软件基金会的一个软件项目,它能够为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册等功能。 Apache ZooKeeper 1.0.0版本至3.4.13版本和3.5.0-alpha版本至3.5.4-beta版本中存在授权问题漏洞。该漏洞源于网络系统或产品中缺少身份验证措施或身份验证强度不足。
CVE-2019-0201 MPS-2019-5668
2022-08-08 18:06
Vmware Spring Framework存在未明漏洞
输入验证不恰当
Vmware Spring Framework是美国威睿(Vmware)公司的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。Vmware Spring Framework存在安全漏洞,攻击者可利用该漏洞通过日志注入绕过Spring框架的访问限制从而修改数据。
CVE-2021-22060 MPS-2021-18854
2022-08-08 18:06
Spring Framework权限许可和访问控制问题漏洞
特权管理不恰当
在 Spring Framework 中,5.2.x 5.2.15 之前的版本和 5.3.7 之前的 5.3.7 版本中,WebFlux 应用程序容易受到权限提升的影响:通过(重新)创建临时存储目录,本地经过身份验证的恶意用户可以读取或修改已上传到 WebFlux 应用程序的文件,或用多部分请求数据覆盖任意文件。
CVE-2021-22118 MPS-2021-7485
2022-08-08 18:06
org.apache.httpcomponents:httpclient 存在相对路径遍历漏洞
相对路径遍历
org.apache.httpcomponents:httpclient 是 Apache HttpComponents 项目的一个 HttpClient 组件。此软件包的受影响版本容易受到目录遍历的影响。
MPS-2022-12292
2022-08-08 18:06
com.fasterxml.jackson.core:jackson-databind 存在拒绝服务漏洞
拒绝服务
com.fasterxml.jackson.core:jackson-databind 是一个库,其中包含Jackson Data Processor的通用数据绑定功能和树模型。当使用 JDK 序列化来序列化和反序列化 JsonNode 值时,此包的受影响版本容易受到拒绝服务 (DoS) 的攻击。
MPS-2022-12500
2022-08-08 18:06
spring-beans 远程代码执行漏洞(Spring4Shell)
表达式注入
spring-beans 负责实现 Spring 框架的 IOC 模块。 CVE-2010-1622 中曾出现由于参数自动绑定机制导致的问题, 通过黑名单的方式修复了该漏洞,但是 JDK9之后引入了 Module,使得可以通过 getModule 绕过前者的黑名单限制,导致远程代码执行。 org.springframework:spring-beans的5.3.0 至 5.3.17、5.2.0.RELEASE 至 5.2.19.RELEASE 版本都受到影响。
CVE-2022-22965 MPS-2022-6820
2022-08-08 18:06
Apache Tomcat 授权问题漏洞
认证机制不恰当
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。 Apache Tomcat存在授权问题漏洞,该漏洞源于Apache Tomcat 的 JNDI 领域中的一个漏洞允许攻击者使用有效用户名的变体进行身份验证和/或绕过锁定LockOut 领域提供的某些保护。
CVE-2021-30640 MPS-2021-10264
2022-08-08 18:06
Vmware Spring Framework 注入漏洞
输入验证不恰当
Vmware Spring Framework是美国威睿(Vmware)公司的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。 Spring Framework 存在注入漏洞,该漏洞源于通过日志注入绕过 Spring Framework 的访问限制,以更改数据。
CVE-2021-22096 MPS-2021-18890
2022-08-08 18:06
Apache Tomcat 安全漏洞
输入验证不恰当
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat 存在安全漏洞,该漏洞源于程序处理某些 TLS 数据包时存在无限循环,远程攻击者可以向应用程序发送特制的数据包,消耗所有可用的系统资源并导致拒绝服务条件。
CVE-2021-41079 MPS-2021-31848
2022-08-08 18:06
Jakarta Expression Language 输入验证错误漏洞
表达式注入
Jakarta Expression Language是Jakarta项目的一种语言。提供了一种重要的机制,使表示层(网页)能够与应用程序逻辑(托管Bean)进行通信。 Jakarta Expression Language implementation 3.0.3版本及之前存在安全漏洞,该漏洞源于程序中的一个bug使无效的EL表达式能够被当作有效的表达式来计算。
CVE-2021-28170 MPS-2021-7671
2022-08-08 18:06
Vmware Spring Framework 安全特征问题漏洞
大小写敏感处理不恰当
Vmware Spring Framework是美国威睿(Vmware)公司的一套开源的Java、JavaEE应用程序框架。 Vmware Spring Framework的disallowedFields 模式区分大小写,这意味着除非字段同时列出字段的第一个字符小写,包括属性路径中所有嵌套字段的第一个字符的大写和小写,否则远程攻击者利用该漏洞可以绕过实施的安全限制。
CVE-2022-22968 MPS-2022-1098
2022-08-08 18:06
commons-codec:commons-codec 存在信息暴露漏洞
信息暴露
commons-codec:commons-codec 是一个包含各种格式(如 Base64 和 Hexadecimal)的简单编码器和解码器的包。此软件包的受影响版本容易受到信息泄露的影响。
MPS-2022-11853
2022-08-08 18:06
Apache Tomcat 安全漏洞
检查时间与使用时间(TOCTOU)的竞争条件
针对错误 CVE-2020-9484 的修复在 Apache Tomcat 10.1.0-M1 至 10.1.0-M8、10.0.0-M5 至 10.0.14、9.0.35 至 9.0 中引入了检查时间、使用时间漏洞。 56 和 8.5.55 到 8.5.73 允许本地攻击者以 Tomcat 进程正在使用的用户的权限执行操作。仅当 Tomcat 配置为使用 FileStore 持久化会话时,此问题才可利用。
CVE-2022-23181 MPS-2022-1351
2022-08-08 18:06
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
3 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部