·网关实现Handler拦截请求
在《基于CSE的微服务架构实践-基础架构》中,我们介绍了一个典型的微服务架构,如下。采用这种架构的微服务,通常会碰到一个问题:用户管理服务提供了大量的REST证券股票交易接口,接口供其他微服务访问,但是不期望外部用户通过网关访问这些证券股票交易接口,接口。
为了实现这个功能,很多开发框架要求用户在网关配置URL黑白名单,这个方法让用户实现证券股票交易接口,接口访问控制变得复杂,并且容易疏漏。采用CSE可以轻松实现证券股票交易接口,接口访问控制。·定义证券股票交易接口,接口是否允许对外访问
网关实现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);
}
}
上面的例子从一个简单的应用场景,展现了CSE相较于与其他开发框架的优势。CSE的运行时基于OpenAPI,可以在网关、客户端等处理环节获取到调用证券股票交易接口,接口的元数据信息,这些信息为用户开发公共的管控能力,提供了强大的支持。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;
}
}
文章为作者独立观点,不代表股票交易接口观点