成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實戰!openFeign如何實現全鏈路JWT令牌信息不丟失?

開發 前端
令牌中繼通俗的講則是讓令牌在微服務鏈路調用中傳遞下去,保證各個微服務能夠獲取令牌中的用戶信息。

???

今天這篇文章介紹一下JWT令牌如何在微服務鏈路中保證信息不丟失?官方稱為令牌中繼。

什么是令牌中繼?

令牌中繼通俗的講則是讓令牌在微服務鏈路調用中傳遞下去,保證各個微服務能夠獲取令牌中的用戶信息。

以下訂單的例子來說,如下圖:

???

下單流程

客戶端攜帶令牌請求網關,網關鑒權成功后會將令牌中的用戶信息解析出來放在請求頭中下發給訂單服務,同樣的,訂單服務需要將用戶信息傳遞給賬戶服務獲取該用戶的賬戶信息。

那么問題來了?如何保證網關服務->訂單服務->賬戶服務這條鏈路中的用戶信息傳遞下去是個痛點

解決方案

令牌在openFeign調用過程中是不能自動中繼的,因此必須手動的將令牌信息傳遞下去。

注意:openFeign在開啟熔斷降級后內部調用開啟了子線程,因此傳統的方案直接在RequestInterceptor中設置是不可行的。

那么如何保證子線程也能獲取請求頭中的用戶信息呢?

答案是:RequestContextHolder這個神器。

RequestContextHolder內部通過InheritableThreadLocal實現子線程共享信息。

在FeignCircuitBreakerInvocationHandler這個類中也是有如下一行代碼:

RequestContextHolder.setRequestAttributes(requestAttributes); 



正是使用RequestContextHolder將request的信息保存在其中,因此實現令牌中繼只需要讀取RequestContextHolder的信息即可。

詳細代碼如下:

/**  * @author 公眾號:碼猿技術專欄  * 用于實現令牌信息中繼  */ @Component public class FeignRequestInterceptor implements RequestInterceptor {     @Override     public void apply(RequestTemplate template) {         //從RequestContextHolder中獲取HttpServletRequest         HttpServletRequest httpServletRequest = RequestContextUtils.getRequest();         //獲取RequestContextHolder中的信息         Map<String, String> headers = getHeaders(httpServletRequest);         //放入feign的RequestTemplate中         for (Map.Entry<String, String> entry : headers.entrySet()) {             template.header(entry.getKey(), entry.getValue());         }     }      /**      * 獲取原請求頭      */     private Map<String, String> getHeaders(HttpServletRequest request) {         Map<String, String> map = new LinkedHashMap<>();         Enumeration<String> enumeration = request.getHeaderNames();         if (enumeration != null) {             while (enumeration.hasMoreElements()) {                 String key = enumeration.nextElement();                 String value = request.getHeader(key);                 map.put(key, value);             }         }         return map;     } } 



源碼目錄如下圖:

???


責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2023-11-14 09:04:15

用戶節點不可用

2023-01-30 22:34:44

Node.js前端

2021-10-22 09:00:59

令牌JWT

2021-12-30 08:13:00

JWT登錄令牌

2024-10-23 12:50:13

數據飛輪數字化

2023-11-21 09:35:49

全量部署微服務

2024-01-05 00:29:36

全鏈路灰度發布云原生

2025-05-26 08:50:00

SLF4JMDC全鏈路追蹤

2022-08-31 22:25:53

微服務架構DevOPs

2025-01-20 08:10:00

微服務架構SLF4J

2023-06-01 08:54:08

RabbitMQ確認機制生產端

2023-11-13 10:41:44

Spring微服務

2023-10-16 23:43:52

云原生可觀測性

2022-02-15 17:56:19

SpringBoot日志

2022-12-28 09:07:41

2022-05-23 08:23:24

鏈路追蹤SleuthSpring

2024-09-27 20:00:04

2024-03-13 08:56:17

全鏈路壓力測試

2022-01-04 17:08:02

全鏈路觀測平臺

2024-12-16 13:34:35

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一卡二卡 | 麻豆国产精品777777在线 | 国产资源在线视频 | 久久精品国产一区二区三区 | www.久久久久久久久久久久 | 91玖玖| 亚洲视频在线观看免费 | 一区二区三区四区电影 | 亚洲精品在线视频 | 久久国 | 欧美日韩专区 | 高清av一区 | 中文字幕综合 | 伊人久操 | 亚洲一区二区欧美 | 久久久夜 | 午夜精品一区二区三区在线观看 | 羞羞羞视频 | 91av大全 | 亚洲一区二区电影在线观看 | 亚洲电影专区 | 91视频正在播放 | 国产精品久久久久影院色老大 | 欧美成人免费在线 | 久草在线 | 国产成人综合在线 | 国产精品久久久久久久免费大片 | 少妇精品久久久久久久久久 | 亚洲精品在线免费看 | 91.色| 日日噜噜噜夜夜爽爽狠狠视频97 | 精品久久久久久久久久久久久 | 男人的天堂亚洲 | 视频一区二区三区在线观看 | 日韩一级 | 久久com | 另类 综合 日韩 欧美 亚洲 | 97精品超碰一区二区三区 | 国产精品久久久久久久久久久新郎 | 国产精品 欧美精品 | 日韩中文字幕免费 |