SpringCloud实战系列,Feign:Request拦截器原理

SpringCloud实战系列,Feign:Request拦截器原理,第1张

 

 

SpringCloud实战:Feign调用技巧SpringCloud实战:ConfigServer基本使用技巧SpringCloud实战:Feign调用如何传递请求头参数SpringCloud实战:诡异的OPTIONS请求问题SpringCloud实战:高并发下SpringCache分布式缓存坑SpringCloud实战:值得收藏的微服务七篇SpringCloud实战:Feign你不知道的一些坑SpringCloud实战:基于RESTful架构风格的API设计原则SpringCloud实战:Restful架构API接口经典设计误区SpringCloud实战:ConfigServer微服务端使妙用

前言

最近微服务项目上,用到了HTTP协议自定义请求头Headers信息,用于在Feign客户端接口调用,如何传递自定义请求头Headers信息。

完整用法

定义请求头

前端ajax定义其全局请求头信息:pid,ut,wid

headers: {“pid”: getLocalInfo(“pid”),”ut”: getToken(“ut”),”wid”: “WS110022”}

定义Feign客户端类

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

定义API接口提供方:XXX-service

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

定义请求拦截器:feign.RequestInterceptor

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

当进行Feign调用时,RequestInterceptor会拦截Feign请求。通过RequestContextHolder.getRequestAttributes()获取Request对象,然后把request.getHeaderNames()获取请求头信息(pid,ut,wid),通过RequestTemplate把请求头信息传到API接口提供方

Feign:Request拦截器原理

源码解读:大意是传递请求头信息。

Zero or more {@code RequestInterceptors} may be configured for purposes such as adding headers toall requests.No guarantees are give with regards to the order that interceptors are applied.Once interceptors are applied, {@link Target#apply(RequestTemplate)} is called to create the immutable http request sent via {@link Client#execute(Request, feign.Request.Options)}.

在feign-core和心包,有个Feign的build方法,构建拦截器核心Handler:SynchronousMethodHandler,实例化RequestInterceptor子类

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

RequestInterceptor注册

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

真正实例化RequestInterceptor拦截器的是反射对象ReflectiveFeign的newInstance方法,其原理是使用了JDK动态代理设计模式

T proxy = (T) Proxy.newProxyInstance(target.type().getClassLoader(), new Class<?>[]{target.type()}, handler);

调用SynchronousMethodHandler的invoke方法实现请求头参数传递。

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

SynchronousMethodHandler的executeAndDecode方法处理Response数据。

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

关于我

大家好,10年JAVA老兵,擅长微服务,分布式,并发,工作流。请大家多多关注我。

有需要Java资料的同学,可以关注之后私信哈,回复“资料”可以免费领取Java BAT面试宝典/微服务/SpringCloud/SpringBoot等视频和资料,亲记得要点赞转发哦!!!

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

SpringCloud实战系列,Feign:Request拦截器原理,SpringCloud实战系列,Feign:Request拦截器原理,第2张

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/5773986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-28
下一篇 2022-12-28

发表评论

登录后才能评论

评论列表(0条)

保存