问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SpringCloud OpenFeign 服务调用传递 token

发布网友 发布时间:2024-08-20 01:22

我来回答

1个回答

热心网友 时间:2024-08-29 02:46

在SpringCloud OpenFeign中,微服务间服务调用通常涉及用户认证信息的传递,尤其是在从A服务到B服务的内部调用场景中,header信息的传递至关重要。OpenFeign提供了RequestInterceptor作为解决方案,允许我们在接口调用前后添加或修改header。

在单线程中,RequestInterceptor能有效地将header添加到请求中,通过RequestContextHolder获取当前线程的请求对象。然而,当在主线程中开启子线程进行Feign调用时,由于RequestContextHolder基于ThreadLocal,子线程可能无法获取到主线程的header,因为线程切换导致ThreadLocal值的变化。

为解决这个问题,我们观察到RequestContextHolder的实现允许从继承的InheritableThreadLocal中获取属性。通过在子线程创建时继承父线程的requestAttributes,我们可以在子线程中正确获取header。但这在web场景下并不总是有效,因为请求结束后,Tomcat会重置request对象,移除header,导致子线程获取不到。

为确保子线程始终能获取到header,可以采取控制主线程在子线程结束后再结束的策略,或者在子线程中重新保存header信息,使用自定义的ThreadLocal结构。通过定义拦截器在请求开始时保存header,然后在子线程中通过这个拦截器获取。

总结来说,OpenFeign在多线程环境下传递header时需要注意线程切换和request对象状态的变化。理解ThreadLocal和InheritableThreadLocal的原理有助于更好地解决此类问题。如有对这些概念不清楚的同学,后续文章将深入讲解。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 什么生日蛋糕好吃不腻哪些生日蛋糕好吃不腻 微服务权限终极解决方案,Spring Cloud Gateway + Oauth2 实现统一认 ... howtobesafe英语作文初三年级 广州省内跨市出行是否需要核酸 14号通告 howtobeagoodleaner作文 广州封城了吗2022 广州疫情最新消息 2022年广州疫情今天封城了吗最新消息 抖音蓝v认证的好处有哪些? 新乡哪个省 新乡属于哪个省 灵域烈焰鸢是好是坏 干桂圆能直接吃吗 波浪滔天钟灵石加多少速度 干桂圆可以直接吃吗 干桂圆直接吃有什么好处吗 花雕酒和黄酒有什么区别?花雕酒的功效与作用 预制方桩用什么符号表示,如何表示的? 怎么去除word表格中的边框? 怎样消除衣服上的圆珠笔字迹 翡翠银葫芦吊坠绳子怎么选择 翡翠银葫芦吊坠配什么绳子 如何去掉Word文档中表格的线? 哪种生日蛋糕好吃不腻什么生日蛋糕好吃不腻 EP79:一图看懂会话、Token、JWT和OAuth 小米手机状态栏的电话图标如何隐藏? 什么是token不能为空的原因,有哪些? 钻戒戒托au750是什么金 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul) 早晨起床眼睛有眼屎怎么回事 有什么素炒大杂烩的做法大全分享? 钻戒戒托AU750是什么意思 姓贠的人是怎么来的呢? 应该怎样烹饪中卫素杂烩才美味? 素菜大杂烩有什么特别的做法? 电影院的自助取票机怎么操作? 公司设立失败有什么责任 微信网名励志稳重女生坚强励志的微信网名女生 很霸气忍辱的微信名字 湛海高铁干线宽多少米 纸鸢寄情度七夕中式浪漫看非遗 土命适合北方还是南方 少驻的拼音狐少驻的拼音是什么