当前位置: 首页 >文章 > SpringCloud Alibaba微服务实战三十四 - 隐私接口禁止外部访问
收藏
分享

SpringCloud Alibaba微服务实战三十四 - 隐私接口禁止外部访问

举报小虎转载君小虎转载君发布于 2021-08-101232阅读0点赞
其实代码不是关键,关键在于要让团队共同遵守这个接口规范,思想比实现更重要。...

大家好,我是飘渺!

在SpringCloud实战系列文章中曾经介绍过在SpringCloud体系下如何防止前端请求绕过网关直接到达后端微服务,今天我们要反其道而行之,介绍在SpringCloud体系中如何防止内部隐私接口被网关调用。

看到这里可能有的同学会有点晕,怎么还有这种业务场景呢,别急,咱们先回顾一下我们的业务场景。


友情提示,这是系列文章,欢迎持续关注!

业务场景

客户端通过网关调用OrderService服务获取数据,OrderService通过Feign调用AccountService服务,而当AccountService提供对应的Feign接口后,客户端是可以通过网关直接调用AccountService接口的。

现在假设AccountService提供的接口包含了部分隐私数据,只允许内部调用协助OrderService进行业务逻辑处理,不允许客户端直接获取,此时咱们需要怎么做?

业务实战
我们先通过代码将原始的流程实现出来,即通过网关调用OrderServiceOrderController,然后在OrderController中通过Feign调用AccountService的AccountController,为了便于阅读,文章中删除了部分无用代码。

模拟实现

1.入口 OrderController


OrderController中通过AccountClient调用AccountService

ResultData<String> secretValue = accountClient.getSecretValue();

2.Feign接口



3.AccountController实现



正如我们前面所说,一旦提供了Feign接口,在默认情况下我们可以直接通过网关访问getSecretValue()方法,那怎么确保这个方法不让外部调用呢?

解决方案
网上现在大部分的解决办法是基于黑名单机制,即将这些接口放入“黑名单”中存储起来,在网关启动时读取黑名单配置,然后校验是否在黑名单中。

这种办法确实也可以,但是总感觉不够灵活,而且实现也比较繁琐,这里就不展开了。

我们今天介绍的是利用访问路径来实现,非常简单轻便。

实现原理
我们需要借助接口路径规范来实现,即给接口指定访问路径时采用这样的格式 : /访问控制/接口

访问控制可以有以下几个规则(参考JAVA包规范),可根据业务需要进行扩展。


有了这套接口规范以后,我们就可以灵活控制接口访问权限,然后在网关对接口路径进行校验,如果命中对应的访问控制规则就进行对应的逻辑处理。

代码实战
既然知道了实现原理,那写代码就很简单了。

1.修改接口访问路径,遵循接口路径规范



修改feign的访问路径。


修改接口实现类的访问路径,这里需要与Feign的路径保持一致。

2.网关自定义拦截器进行接口校验



通过上面简单两步我们就能实现本文提出的问题了,接下来我们测试一下。

测试
1.直接访问后端服务,提示无法访问

2.通过OrderService访问后端服务正常访问

小结
让内部隐私接口不被外部访问,我相信做微服务开发的同学基本都会遇到。本文中提供的解决方案代码量很少而且接口路径规范可以根据自己的业务规则进行修改扩展,推荐大家使用。其实代码不是关键,关键在于要让团队共同遵守这个接口规范,思想比实现更重要。

我是飘渺Jam,一名写代码的架构师,做架构的程序员,期待您的转发与关注,咱们下期见!


本文原创,未经作者允许不可转载!
更多内容,欢迎关注作者微信公众号:JAVA日知录!


0条评论
别默默看啦~登录/注册一起参与讨论吧~

暂无评论

请选择举报理由

违反法律法规

侵犯个人权益

有害网站环境

更多训练营>>

为你推荐 · 训练营(全勤打卡报名费全额返累计全额返用户133,673人)

电商海报设计训练营
距离开班仅剩6天73人已报名
【5月】零基础手绘插画训练营
距离开班仅剩6天69人已报名
【5月】零基础动态表情包创作训练营
距离开班仅剩23天16人已报名
特惠
充值
7折购
今日还在继续学习的你,太棒了!
7
折扣券可用于
年费无限VIP
立 即
使 用
此活动优惠不可与其他活动叠加使用
有效期:000000
消息
登录即可查看消息记录
建议
意见
官方
客服
在线咨询客服热线

您可以与在线客服进行沟通获得帮助

工作日:9:00~22:00节假日:9:00~18:00

联系在线客服

您可以电话联系客服进行沟通获得帮助

工作日:9:30~18:30

400-862-9191
虎课
积分
免费学习89000+个教程!
配套素材、源文件一键下载!
昨日学员已学习了29,770
并提交了155份作业!
登录后立即学习!
loading
微信扫码关注即可登录
您需要同意协议才可以进行登录
登录虎课网,每天免费学课程全站 89000+ 视频会员教程 | 每日可免费学 1
为确保账户信息安全
请先进行真实姓名验证后进行充值付款
立即验证