使用CSE轻松实现接口访问控制
接口 实现 轻松 访问控制 使用
2023-09-14 08:57:19 时间
本文介绍了如何使用CSE轻松实现接口访问控制,通过例子展现了CSE微服务开发框架在契约管理方面的优势。
在《基于CSE的微服务架构实践-基础架构》中,我们介绍了一个典型的微服务架构,如下图。采用这种架构的微服务,通常会碰到一个问题:用户管理服务提供了大量的REST接口供其他微服务访问,但是不期望外部用户通过网关访问这些接口。
为了实现这个功能,很多开发框架要求用户在网关配置URL黑白名单,这个方法让用户实现接口访问控制变得复杂,并且容易疏漏。采用CSE可以轻松实现接口访问控制。
· 定义接口是否允许对外访问
在开发REST的接口的时候,需要声明这些接口是否允许对外访问。用户可以使用@Api或者@ApiOperation声明tags的方式,标记这些接口只能够对外访问。
@RestSchema(schemaId = "InternalAccessDemo")
@RequestMapping(path = "/")
@Api(tags = {"INTERNAL"})
public class InternalAccessDemo {
@GetMapping(path = "localAccess")
public String localAccess(String name) {
return "Hello, " + name;
}
}
· 网关实现Handler拦截请求
网关实现Hanlder,检查访问的接口是否具备定义的tags,如果具备,认为是内部接口,不允许访问。
public class InternalAccessHandler implements Handler {
@Override
public void handle(Invocation invocation, AsyncResponse asyncReponse) throws Exception {
if (invocation.getOperationMeta().getSwaggerOperation().getTags() != null
&& invocation.getOperationMeta().getSwaggerOperation().getTags().contains("INTERNAL")) {
asyncReponse.consumerFail(new InvocationException(403, "", "not allowed"));
return;
}
invocation.next(asyncReponse);
}
}
上面展示了Handler的逻辑:检查接口是否定义了名称为”INTERNAL”的tags,如果包含,则不允许访问。通过定义cse.handler.xml和cse.handler.chain.Consumer.default启用这个自定义的Handler,就轻松的实现了接口访问控制。
上面的例子从一个简单的应用场景,展现了CSE相较于与其他开发框架(比如Spring Cloud等)的优势。CSE的运行时基于OpenAPI,可以在网关、客户端等处理环节获取到调用接口的元数据信息,这些信息为用户开发公共的管控能力,提供了强大的支持。CSE的治理能力,都是基于这些信息进行独立构建的。
作者:liubao68
相关文章
- 定制并发类(七)实现ThreadFactory接口生成自定义的线程给Fork/Join框架
- 定制并发类(四)实现ThreadFactory接口生成自定义的线程
- 微信支付(公众号支付APIJS、app支付)服务端统一下单接口java版
- destoon7.0会员模块+产品供应模块发布接口
- C语言异常与断言接口与实现
- 路飞学城项目-支付相关-结算接口
- 微信企业给用户付款接口,golang版
- [Dnc.Api.Throttle] 适用于. Net Core WebApi 接口限流框架
- libEasyPlayer RTSP windows播放器SDK API接口设计说明
- java多线程 -- 创建线程的第三者方式 实现Callable接口
- 接口自动化-request-interface-研究笔记
- PG&GP · 特性分析 · 外部数据导入接口实现分析
- 【安富莱专题教程第1期】基于STM32的硬件RGB888接口实现emWin的快速刷新方案,32位色或24
- 外设测试 - CAN 接口测试
- 【Go进阶】详解接口 interface 赋值
- 使用CSE轻松实现接口访问控制
- 不调用三方收费接口,照样实现了识别图片为文字的功能
- 玩转华为ENSP模拟器系列 | 两个网关之间利用Tunnel接口实现IPSec VdPdNd隧道多链路备份
- Doraemon-接口自动化测试工具
- go 接口实现
- java中请给一个Abstract类实现接口的实例!
- ASP.NET Core微服务(七)——【docker部署linux上线】(RDS+API接口测试部分)
- 【springboot系列】Spring Boot 实现接口幂等性的 4 种方案
- java 阿里云接口实现发送短信验证码
- Golang struct 和 interface:结构体与接口都实现了哪些功能?
- Eclipse如何查看接口的实现类和继承层级关系