判断微服务中的http请求来源
2021-11-20 本文已影响0人
向上生长之路
使用SpringCloud做微服务开发,有时需要判断微服务中的http请求来源,判断请求是来自微服务网关转发还是来自其它的微服务调用等情况,以便于根据不同的请求来源做不同的逻辑处理,这时如何才能区分请求来源呢?
本文给大家分享一种通过http请求头来判断微服务中的http请求来源方法~
- SpringCloud版本 Greenwich.SR2
- SpringBoot版本 2.1.7.RELEASE
工作原理
下面以我的示例工程来给大家演示,大家可以将仓库克隆下来方便测试:https://github.com/netbuffer/spring-cloud-demo
1.在微服中添加返回http请求头的映射方法,来观察请求头信息
2.启动相应的微服务注册中心、微服务、微服务网关组件
3.通过直接访问微服务的headers接口与通过网关转发访问headers接口来做比较
4.通过观察响应结果可以看到,经过网关转发后会携带额外的请求头信息,例如,我测试工程中使用的zuul网关,会携带x-forwarded-prefix来标识当前微服务的路径前缀,猜测在其它的微服务网关中如Spring Cloud Gateway等,也会携带相应的请求头来标识经过网关的转发信息,就可以以此请求头信息为依据来判断请求的来源了
使用方式
了解了工作原理,我们就可以在微服务中,通过检测Http请求中相关的请求头来判断请求来源啦
另外,在zuul中,可以通过实现自定义的过滤器,来注入自定义的header请求头
那么在微服务中就可以顺理成章的检测自定义的header值,来判断请求来源啦~