本文介绍了如何使用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 {@Overridepublic 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

使用CSE轻松实现接口访问控制相关推荐

  1. Swagger增强神器:Knife4j!用它轻松实现接口搜索、Word下载、接口过滤...

    Swagger 是开发中最常用的框架之一了,但 Swagger 本身又有很多不完善的地方,比如,在众多的接口中查询某一个接口,又或者是把所有的接口导出成 Word 格式等,都无法在 Swagger 中 ...

  2. usb扩展坞同时接键盘鼠标_笔记本扩展伴侣,轻松解决接口烦恼,毕亚兹USB-C扩展坞体验...

    俗话说,鱼和熊掌不可兼得.生活工作中的数码产品也同样如此,就拿日常工作学习必备的笔记本产品来说,功能和便携同样是难以取舍.大家都知道,伴随近几年笔记本轻量化和高功能的发展,笔记本在接口方面也发生了很大 ...

  3. 微服务启动顺序_基于华为云CSE微服务接口兼容常见问题

    微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...

  4. 基于华为云CSE微服务接口兼容常见问题

    微服务接口兼容常见问题 在进行微服务持续迭代开发的过程中,由于新特性在不停的加入,一些过时的特性在不停的修改,接口兼容问题面临巨大的挑战,特别是在运行环境多版本共存(灰度发布)的情况下.本章节主要描述 ...

  5. dubbo接口访问控制

    微服务背景下,一个web应用都可能不再service依赖,而是通过RPC调用远端服务器上的服务.这些服务里,就包括了一些不能轻易暴露的后台功能接口.暴露出去的dubbo接口注册到某一个zk上后,该du ...

  6. 基于 python 的接口自动化测试,让你轻松掌握接口自动化

    目录 目录 一.简介 ​编辑二.引言 三.环境准备 四.测试接口准备 接口信息 五.编写接口测试 六.优化 封装接口调用 一.简介 本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势: 然后 ...

  7. 【注解】超简单轻松实现接口超频防刷

    目的:限制用户在一段时间内调用接口次数 1.自定义注解类 /*** 接口防刷注解* @Author: wwwppp* @Date: 2021-3-19 17:17*/ @Retention(RUNTI ...

  8. 一起读Apache ServiceComb

    喜欢我,就点个Star吧~ https://github.com/apache?q=servicecomb 入门必读: 必读1:首个Apache微服务顶级项目毕业 必读2:致微服务开发者的一封信(一周 ...

  9. threejs 影子属性_影子场vs.属性访问器接口第2轮

    threejs 影子属性 如果你们还没有注意到Dirk Lemmerman和我之间的(轻松) 摊牌 ,那么让我快速提及一下我们是如何做到这一点的. 首先,Dirk创建了JavaFX技巧23:" ...

最新文章

  1. Spring Cloud--Honghu Cloud分布式微服务云系统—System系统管理
  2. 05 Python 并发编程(管道,事件,信号量,进程池)
  3. Python Django 自定义Manager实现批量删除(逻辑删除)
  4. chinaren校友录恢复重新开放_确定!九寨沟景区9月27日对外开放(试运行) 最大限量为每天5000人 各大旅企产品已上线...
  5. 小程序服务器api接口,百度智能小程序API 开放接口
  6. 房价预测 search Search 中对数据预处理的学习
  7. Java 使用 POI 操作 Excel
  8. 苹果商店上架流程_苹果TF签名是什么?
  9. 【软件工程大作业】软件项目管理之成本管理
  10. 我是SPI,我让框架更加优雅了!
  11. crash _mach_msg_trap
  12. 集成学习-Task2 机器学习基础模型回顾
  13. php格林威治时间,时间戳与格林威治时间互相转换
  14. 社区专家谈 12306 1
  15. Sublime Text3(mac版)上好用的插件
  16. ILSpy中baml转化为xaml的改进
  17. linux shell sed 单引号, 双引号,反引号, 斜杆, 反斜杆(‘ “ ` / \)
  18. 百度网盘免费提速设置
  19. List、Set、Map、Queue、Deque、Stack的遍历方式总结
  20. 人生的12句Comperehend领悟-感悟颇深

热门文章

  1. 计算机数据库系统考研复试面试题,2016年山西财经大学081203计算机应用技术871数据库系统概论复试笔试最后押题五套卷...
  2. 微信发ascii_微信公众平台开发(107) 分享到朋友圈和发送给好友
  3. 亚信安全认证acse_安全世界 5正当时 | 邀您共启”2020第五空间战略发展高峰论坛”...
  4. 4,表查询语法,表连接,子查询
  5. 雷林鹏分享:CSS Id 和 Class
  6. [转]Zabbix 3.0 安装笔记
  7. Unity3d Shader开发(三)Pass(Fog )
  8. sqlserver 2008阻止保存要求重新创建表的更改
  9. C语言课后习题(57)
  10. 数据结构—链表-建立单链表