一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springcloud 中 zuul 修改請求參數信息的方法

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

2021-03-30 14:54礦泉 Java教程

這篇文章主要介紹了springcloud 中 zuul 修改請求參數信息的方法,需要的朋友可以參考下

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() 方法中,可以用

?
1
2
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();

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

三.具體做法

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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 中,可以用 形似

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

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

四.一些嘗試

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

總結

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

原文鏈接:http://blog.csdn.net/kysmkj/article/details/79092781

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 办公室恋情在线 | 国产成人精品第一区二区 | 特黄aa级毛片免费视频播放 | yy8090韩国日本三理论免费 | 国产成人a∨麻豆精品 | 国产精品视频在线观看 | 亚洲精品成人456在线播放 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 精品91 | 男人天堂资源网 | 高清在线免费观看 | 国产精品天天看特色大片不卡 | 无限好资源免费观看 | 国产精品拍拍拍福利在线观看 | 饭冈加奈子在线播放观看 | 国产播放器一区 | 欧美一区二区三区免费观看视频 | 性柔术xxxhd 性派对videos18party | 精品视频在线免费观看 | 欧美一级乱妇老太婆特黄 | 亚洲精品第一国产综合高清 | 国产网站免费观看 | 国产剧情在线播放 | 亚洲国产在线综合018 | 午夜在线观看免费完整直播网页 | 天美传媒传媒免费观看 | 日本亚洲娇小与黑人tube | 女教师系列三上悠亚在线观看 | 日本生活中的玛丽 | 欧美日本一本线在线观看 | 精品国产品香蕉在线观看75 | 国产精品亚欧美一区二区三区 | 久久视频这只精品99re6 | 亚洲高清在线视频 | 草草视频在线免费观看 | 精品国语国产在线对白 | 日本一区二区视频在线 | 国产亚洲福利一区二区免费看 | 校花在公车上被内射好舒 | 91啦在线视频| 日韩成人精品在线 |