项目中用到了feign做远程调用, 有部分场景需要动态配置header
开始的做法是通过 @requestheader 设置参数来实现动态的header配置
这种方式虽然可以达到header的动态配置, 但是当参数过多时会降低接口可用性, 所以想通过传递bean的方式来设置header
自定义interceptor实现requestinterceptor接口, 回调方法apply提供了requesttemplate对象, 对象内部封装了request的所有信息, 最后通过configuration指定接口, 之后就随便你怎么玩了(例如通过body获取接口参数并动态设置header)
值得注意的一点是headerinterceptor如果注入到springboot容器的话会全局生效, 就是说及时没有指定configuration也会对全局feign接口生效, 为什么呢? 这里简单说明一下
首先feign为每个feign class创建springcontext上下文
spring通过调用getobject获取feign工厂实例
内部调用feignclientfatorybean.gettarget()方法
根据feign(feigncontext context)构建builder
在构建过程中通过feignclientfactorybean.configure任长霞电影usingconfiguration为feign class注册基本的配置项, 其中也包括了interceptor的注册
contextid为具体的feign class id, requestintercep人口普查2020具体内容tor为具体的接口, 即是说通过context.getinstances获取所有requestinterceptor实例并注册到builder中.
获取工厂中的实例使用的是beannamesfortypeincludingancestors方法, 该方法不仅会从feign的factory中查找, 也会通过父级别spring工厂查找相应实例(类似于springmvc的工厂)
也是因为该方法, 即使你没有在feignclient中配置configuration, 但是你的interceptor通过@component等方法注入容器的话也会全局生效的, 所以如果指向让你的interceptor部分生效不让它注入到spring容器就好
在使用微服务springcloud全家桶组件fegin的时候,我们在进行远程服务之间调用的军训小结同时,为了防止客户端劫持信息,我们需要将一些敏感信息添加到我们的fegin头部(header)当中,今天朋友问起,总结一下:那么工作中常见的方式有两种
使用@requestheader军训征文(name = “id̶外国文学论文1;)可以传递动态header属性
设置header(所有的fegin请求)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-06 01:09:26,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/0ee8be65a1d5d934852cfdd29d294f07.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:使用Feign动态设置header和原理分析.doc
本文 PDF 下载地址:使用Feign动态设置header和原理分析.pdf
留言与评论(共有 0 条评论) |