springcloudでzulが要求パラメータ情報を修正する方法


ZuulはNetflixのJVMルートとサービス端末による負荷イコライザです。
Zuul機能:
  • 認証
  • 圧力テスト
  • カナリア試験
  • ダイナミックルーティング
  • 負荷削減
  • 安全
  • 静的応答処理
  • アクティブ/アクティブ交換管理
  • Zuulのルールエンジンは、どのJVM言語でもルールとフィルタを作成することができ、JavaとGrovyに基づく構築をサポートします。
    設定属性はZul.max.host.co.inectionsがすでに2つの新しい構成属性に置き換えられました。zul.host.maxTotal Connection(総接続数)とzul.host.maxPerRoute Connection、(ルート接続数ごとに)デフォルト値はそれぞれ200と20.
    一.なぜこれを使うのですか?
      springcloudに基づいて構築されたマイクロサービスシステムでは、通常、ゲートウェイZulを使用して、ユーザがheaderまたはurlパラメータにtokenを格納するなど、いくつかのユーザ検証などのフィルタリングの動作が行われ、ゲートウェイ層は、このtokenを用いてユーザのuserIdを検出し、requestに保存し、後続のマイクロサービスを直接使用してtokenで検索することができるようにする必要がある。
    二.基礎知識
        zullで一番大きな使い方はルート以外にフィルタです。カスタムフィルタはインターフェースZuul Filterを実現します。run()の方法で使えます。
    
    RequestContext ctx = RequestContext.getCurrentContext(); 
    HttpServletRequest request = ctx.getRequest(); 
    requestを取得しましたが、requestではget Parameeter()しかなく、set Parameeter()の方法がないので、urlパラメータを直接修正することはできません。また、reqeustではset Attribute()が使用できますが、ここで設定されているatributeは、後続のマイクロサービスでは入手できません。
    三.具体的なやり方
       最後に確実に実行できる方法は、
    
    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"); 
    このように、zulFilterから伝わったuserIdを取得します。
    四.いくつかの試み
     書き換え中  HttpServletRequest Wrapperの時、私は getParameterNames() getParameterMap() の書き換え方法を試しました。urlパラメータを書き換えたいですが、有効ではありません。
    締め括りをつける
    以上は小编で绍介したspringcloudのzul修正要求パラメータの情报の方法です。皆さんに助けてほしいです。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。