成人免费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

2024-10-23 12:50:13

數據飛輪數字化

2021-12-30 08:13:00

JWT登錄令牌

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-03-13 08:56:17

全鏈路壓力測試

2022-01-04 17:08:02

全鏈路觀測平臺

2024-12-16 13:34:35

2022-07-22 07:59:17

日志方案
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色毛片网站在线观看 | www.国产视频| 欧美日韩在线一区二区 | 欧美一级二级在线观看 | 亚洲精品一区二区三区在线 | japan21xxxxhd美女| www.日本三级 | 久久国产高清 | 日韩一及片 | av一级一片 | 黄色免费看 | 欧洲精品在线观看 | 久草网视频 | www.精品国产 | 91高清在线观看 | 国产精品久久精品 | 99九九久久 | 中文字幕视频在线看5 | 91 久久 | 亚洲精品一区二区在线观看 | 亚洲视频免费观看 | 日日夜夜免费精品视频 | 日韩国产在线 | av网站免费看| 亚洲精彩免费视频 | 日韩成人免费 | 成人av一区 | 久久天堂网 | 欧美电影大全 | 成人免费视频网站在线看 | 久久久久久久久中文字幕 | 亚洲精品99 | 日韩中文字幕一区二区 | 日韩色图在线观看 | 日本精a在线观看 | 日本精品裸体写真集在线观看 | 欧美日产国产成人免费图片 | 日韩欧美在线观看视频 | av一级久久 | 成人在线免费视频 | 国产精品一区在线观看 |