使用CSE轻松实现接口访问控制

本文介绍如何在CSE微服务架构中实现接口访问控制,通过定义接口的对外访问权限,结合Handler拦截请求,轻松管理微服务间的访问,避免外部用户直接访问内部接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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的治理能力,都是基于这些信息进行独立构建的。

往期精彩回顾

Pack 0.4.0新特性解读 |集成Consul

Javachaiss1.2.0新特性解读 |使用inspector功能查看和管理契约

ServiceComb1.2.0发布|新版本特性解读

扫码加群

更多精彩

客官!在看一下呗~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值