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()の方法で使えます。
三.具体的なやり方
最後に確実に実行できる方法は、
後続のマイクロサービスのcontrollerでは、形が似ています。
四.いくつかの試み
書き換え中 HttpServletRequest Wrapperの時、私は
締め括りをつける
以上は小编で绍介したspringcloudのzul修正要求パラメータの情报の方法です。皆さんに助けてほしいです。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
Zuul機能:
設定属性は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修正要求パラメータの情报の方法です。皆さんに助けてほしいです。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。