SpringCloud确保服务只能通过gateway转发访问,禁止直接调用接口访问

Posted 尐鱼儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud确保服务只能通过gateway转发访问,禁止直接调用接口访问相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/zhipengfang/article/details/117455660

SpringCloud 中如何使微服务只能被指定的程序调用

我们在做微服务时,有时候需要将微服务做一些限制,比如只能我们自己的服务调用,不能通过浏览器直接调用等。

 

具体的逻辑如下:

 

我们就可以使用spring cloud sleuth,在应用调用微服务时通过Tracer产生一个traceId,并通过request设置到header里面,

然后sleuth会将该traceId在整个链路传递,我们在微服务中定义一个拦截器,取到header里面的traceId并和链路中的traceId比较,

如果相等,则表明是我们自己的应用调用,拦截器通过,否则这次请求被拦截

 

代码详见github 

https://github.com/devinzhang0209/interview_springcloud.git

 

一. 应用调用微服务,产生traceId

 

1. feign调用微服务,指定配置

 

 

 

2. FeignReqeustConfig中实例化拦截器用于生成traceId

 

 

 

3. 拦截器生成traceId并放到header里面

 

 

 

 

 二 . 拦截器拦截到traceId并和链路中比较

  1. 拦截器判断traceId

  

 

  

 2. 拦截器生效,只拦截微服务的请求(定义时定义微服务都是cloud开头)

   

 

 

 

以上是关于SpringCloud确保服务只能通过gateway转发访问,禁止直接调用接口访问的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud 中如何使微服务只能被指定的程序调用

SpringCloud 微服务应用安全——Security

SpringCloud微服务安全实战API安全 3-9 总结

Spring Cloud Gateway初探

springcloud:配置中心服务化和高可用

微服务SpringCloud无法进行服务消费