微服务开发时,接口不能对外暴露怎么办?

在业务开发的时候,经常会遇到某一个接口不能对外暴露,只能内网服务间调用的实际需求。面对这样的情况,我们该如何实现呢?,今天,我就来说一下码猿慢病云管理系统中是如何实现的?,在介绍码猿慢病云管理系统中的实现方式,先来介绍常用的两种方案。,此方案需要在缓存中维护一套接口白名单,请求到达网关处,先判断白名单缓存中是否存在,存在则放行,反之则拦截。,网关+白名单网关+白名单,该方案的好处是,对业务代码零侵入,只需要维护好白名单列表即可;,不足之处在于,白名单的维护是一个持续性投入的工作,在很多公司,业务开发无法直接触及到 redis,只能提工单申请,增加了开发成本;,另外,每次请求进来,都需要判断白名单,增加了系统响应耗时,考虑到正常情况下外部进来的请求大部分都是在白名单内的,只有极少数恶意请求才会被白名单机制所拦截,所以该方案的性价比很低。,相比于方案一对接口进行白名单判断而言,方案二是对请求来源进行判断,并将该判断下沉到业务侧。避免了网关侧的逻辑判断,从而提升系统响应速度。,我们可以在所有内部的调用请求头中增加一个header标志这是一个内部请求,比如加个请求头:from=Y,只要在业务接口处通过AOP的方式判断一下请求头中是否含有from=Y,如果有,则是内部请求,反之则是外部请求,网关+AOP网关+AOP,码猿慢病云管理系统中采用的是第二种方案:网关+AOP ,下面来介绍一下具体的代码实现。,这里AOP在码猿慢病云管理系统中采用的是注解的方式,注解如下:,在网关处需要对请求头中的from进行清洗,避免有意之人伪装内部请求,这里需要做的就是对每个请求直接移除from这个请求头,直接使用全局过滤器即可完成,代码如下:,既然是内部调用,按照之前的约定是要在请求头中添加一个from=Y,因此在feign接口中需要新增这个请求头,方式很简单,比如设备feign接口,如下:,@GetMapping中的headers属性即可完成新增请求头,同样的比如@RequestMapping、@PostMapping等也是支持的。,这样的话在feign接口发出请求时则会自动在请求头中新增from=Y了。,在第1步中定义了@Inner这个注解,标注在controller方法上表示这个接口只允许内部调用,代码如下:,图片图片,@IngoreAuth这个注解是绕过鉴权的作用,前面文章中也有分享。,那么这个注解内部的实现原理是什么呢?代码如下:,如果请求头中的from属性不匹配,则抛出AccessDeniedException异常,会被全局异常捕获,返回403的状态码,代码如下:,图片图片,本节内容介绍了微服务中接口不对外暴露的两种方案:,当然还有其他的实现方式,生产中根据项目需要选择合适的方案为最佳。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/29322.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日