欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springcloud 中 zuul 修改請求參數(shù)信息的方法

 更新時間:2018年02月02日 16:18:43   作者:礦泉  
這篇文章主要介紹了springcloud 中 zuul 修改請求參數(shù)信息的方法,需要的朋友可以參考下

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

  Zuul功能:

  • 認(rèn)證
  • 壓力測試
  • 金絲雀測試
  • 動態(tài)路由
  • 負(fù)載削減
  • 安全
  • 靜態(tài)響應(yīng)處理
  • 主動/主動交換管理

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

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

一. 為什么要用到這個

  在基于 springcloud 構(gòu)建的微服務(wù)系統(tǒng)中,通常使用網(wǎng)關(guān)zuul來進(jìn)行一些用戶驗證等過濾的操作,比如 用戶在 header 或者 url 參數(shù)中存放了 token ,網(wǎng)關(guān)層需要 用該 token 查出用戶 的 userId ,并存放于 request 中,以便后續(xù)微服務(wù)可以直接使用而避免再去用 token 查詢。

二.基礎(chǔ)知識

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

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

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

三.具體做法

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

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

的方式,重新構(gòu)造上下文中的 request ,代碼如下:

import javax.servlet.http.HttpServletRequestWrapper; 
 // 在json參數(shù)中添加 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參數(shù)。

在后續(xù)的微服務(wù)的 controller 中,可以用 形似

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

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

四.一些嘗試

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

總結(jié)

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

相關(guān)文章

  • 第一次編寫Java流布局圖形界面

    第一次編寫Java流布局圖形界面

    這篇文章主要為大家詳細(xì)介紹了第一次編寫Java流布局圖形界面的相關(guān)代碼,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java SerialVersionUID作用詳解

    Java SerialVersionUID作用詳解

    這篇文章主要介紹了Java SerialVersionUID作用詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot整合mybatis-plus實現(xiàn)分頁查詢功能

    SpringBoot整合mybatis-plus實現(xiàn)分頁查詢功能

    這篇文章主要介紹了SpringBoot整合mybatis-plus實現(xiàn)分頁查詢功能,pringBoot分頁查詢的兩種寫法,一種是手動實現(xiàn),另一種是使用框架實現(xiàn),現(xiàn)在我將具體的實現(xiàn)流程分享一下,需要的朋友可以參考下
    2023-11-11
  • Java分頁查詢的幾種實現(xiàn)方法舉例

    Java分頁查詢的幾種實現(xiàn)方法舉例

    這篇文章主要給大家介紹了關(guān)于Java分頁查詢的幾種實現(xiàn)方法,分頁是系統(tǒng)中常用到的功能,只要涉及到查詢必定伴隨而來的就是分頁,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • SpringBoot啟動多數(shù)據(jù)源找不到合適的驅(qū)動類問題

    SpringBoot啟動多數(shù)據(jù)源找不到合適的驅(qū)動類問題

    這篇文章主要介紹了SpringBoot啟動多數(shù)據(jù)源找不到合適的驅(qū)動類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java實現(xiàn)LRU緩存的實例詳解

    Java實現(xiàn)LRU緩存的實例詳解

    這篇文章主要介紹了Java實現(xiàn)LRU緩存的實例詳解的相關(guān)資料,這里提供實例幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Java面向?qū)ο笕筇匦约岸鄳B(tài)解析

    Java面向?qū)ο笕筇匦约岸鄳B(tài)解析

    這篇文章主要介紹了Java面向?qū)ο笕筇匦约岸鄳B(tài)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java實現(xiàn)簡單解析XML文件功能示例

    java實現(xiàn)簡單解析XML文件功能示例

    這篇文章主要介紹了java實現(xiàn)簡單解析XML文件功能,結(jié)合實例形式分析了java針對xml文件的讀取、遍歷節(jié)點及輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • 詳解Java中布隆過濾器(Bloom Filter)原理及其使用場景

    詳解Java中布隆過濾器(Bloom Filter)原理及其使用場景

    布隆過濾器是1970年由布隆提出的,它實際上是一個很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù),它的作用是檢索一個元素是否存在我們的集合之中,本文給大家詳細(xì)的講解一下布隆過濾器,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • java實現(xiàn)多線程文件的斷點續(xù)傳

    java實現(xiàn)多線程文件的斷點續(xù)傳

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)多線程文件的斷點續(xù)傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論