91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springcloud 中 zuul 修改請求參數信息的方法

發布時間:2020-10-20 20:51:36 來源:腳本之家 閱讀:258 作者:礦泉 欄目:編程語言

Zuul是Netflix出品的一個基于JVM路由和服務端的負載均衡器.

  Zuul功能:

  • 認證
  • 壓力測試
  • 金絲雀測試
  • 動態路由
  • 負載削減
  • 安全
  • 靜態響應處理
  • 主動/主動交換管理

Zuul的規則引擎允許通過任何JVM語言來編寫規則和過濾器, 支持基于Java和Groovy的構建。

配置屬性 zuul.max.host.connections 已經被兩個新的配置屬性替代, zuul.host.maxTotalConnections (總連接數)和 zuul.host.maxPerRouteConnections,(每個路由連接數) 默認值分別是200和20.

一. 為什么要用到這個

  在基于 springcloud 構建的微服務系統中,通常使用網關zuul來進行一些用戶驗證等過濾的操作,比如 用戶在 header 或者 url 參數中存放了 token ,網關層需要 用該 token 查出用戶 的 userId ,并存放于 request 中,以便后續微服務可以直接使用而避免再去用 token 查詢。

二.基礎知識

    在 zuul 中最大的用法的除了路由之外,就是過濾器了,自定義過濾器需實現接口 ZuulFilter ,在 run() 方法中,可以用

RequestContext ctx = RequestContext.getCurrentContext(); 
HttpServletRequest request = ctx.getRequest(); 

獲取到 request,但是在 request 中只有 getParameter() 而沒有 setParameter() 方法,所以直接修改 url 參數不可行,另外在 reqeust 中可以雖然可以使用 setAttribute() ,但是可能由于作用域的不同,在這里設置的 attribute 在后續的微服務中是獲取不到的,因此必須考慮另外的方式。

三.具體做法

   最后確定的可行的方法是,用

ctx.setRequest(new HttpServletRequestWrapper(request) {}) 

的方式,重新構造上下文中的 request ,代碼如下:

import javax.servlet.http.HttpServletRequestWrapper; 
 // 在json參數中添加 userId 
try { 
 InputStream in = ctx.getRequest().getInputStream(); 
 String body = StreamUtils.copyToString(in, Charset.forName("UTF-8")); 
 System.out.println("body:" + body); 
 JSONObject json = JSONObject.fromObject(body); 
 json.put("userId", userId); 
 String newBody = json.toString(); 
 System.out.println("newBody:" + newBody); 
 final byte[] reqBodyBytes = newBody.getBytes(); 
 ctx.setRequest(new HttpServletRequestWrapper(request){  
 @Override 
 public ServletInputStream getInputStream() throws IOException { 
  return new ServletInputStreamWrapper(reqBodyBytes); 
 } 
 @Override 
 public int getContentLength() { 
  return reqBodyBytes.length; 
 } 
 @Override 
 public long getContentLengthLong() { 
  return reqBodyBytes.length; 
 } 
 }); 
} catch (IOException e) { 
 e.printStackTrace(); 
} 

思路就是,獲取請求的輸入流,并重寫,即重寫json參數。

在后續的微服務的 controller 中,可以用 形似

@RequestBody Map<String,Object> body 
======= 
body.get("userId"); 

這樣的方式,去獲取在 zuulFilter 傳入的 userId

四.一些嘗試

 在重寫  HttpServletRequestWrapper 的時候,我嘗試過 重寫 getParameterNames() getParameterMap() 方法,希望重寫 url 參數,但是并沒有生效。

總結

以上所述是小編給大家介紹的springcloud 中 zuul 修改請求參數信息的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓资县| 白山市| 弥勒县| 贞丰县| 太仓市| 望都县| 曲松县| 淅川县| 吉林省| 攀枝花市| 仁化县| 莱西市| 磐石市| 当阳市| 太原市| 汝南县| 富源县| 宿迁市| 海阳市| 新野县| 仙桃市| 漳州市| 缙云县| 武城县| 永修县| 建平县| 河曲县| 麻阳| 红河县| 文登市| 逊克县| 玛纳斯县| 榆中县| 英吉沙县| 仙桃市| 海城市| 天峻县| 大庆市| 德昌县| 兴和县| 江源县|