春の雲フィルタ

フィルターの役割

アプリケーションが提供する当社のマイクロサービスのインタフェースが統一APIゲートウェイエントリを通じてできるように私たちの上記の二つのことで、私たちは、ルーティング要求を達成することができたがへのクライアントアクセスです。しかし、多くの場合、一定の制限へのアクセスを必要とするユーザー・インターフェース・マイクロ回路アプリケーションによって要求された各クライアントサービスは、システムはマイクロサービス・インターフェースのすべてが彼らに開放されてなりません。しかし、現在のサービス・ルーティング機能は、このような権利を制限するものではありませんが、予約なしで、すべての要求は、特定のアプリケーションに転送し、結果を返し、セキュリティチェックを実現し、クライアントから要求されたアクセス権を制御するために、最もシンプルかつ残忍されます各サービスアプリケーションが署名を検証し、アクセス権のセットを識別するために、マイクロフィルタまたはインターセプタを実装するための方法です。しかし、このアプローチは望ましいことではない、それは多くの場合、検証ロジックの同じ様々な環境下でシステムは、実質的に同一または類似しているとして、このような実装は、同様のチェックになるだろう、将来的にシステムを維持することの難しさを増加しますロジック・コードはマイクロに様々なサービスに配信され、冗長なコードは、我々は見たくないということです表示されます。そのため、良い方法は、別々の認証サービスを構築するためにチェックロジックをスピンオフすることです。分離が完了した後、多くの開発者は、認証サービスを呼び出すことにより、パリティを達成するためのマイクロサービスアプリケーションに直接になりますが、本質的には、このようなアプローチは、単に認証ロジックの分離を解決することであり、この部分ではありません、アマチュアは、元の論理マイクロサービスアプリケーション、冗長ブロッカーまたはフィルターがまだ存在して分割しません。

このような問題のために、より良いアプローチは、ゲートウェイサービスの前面からこれらの非動作の性質の完了を確認することです。チェックは、特定のビジネスとは何の関係もありませんので、ゲートウェイサービスを追加するので、外部クライアントは、我々のシステムの統一入学へのアクセス権を持って、なぜチェックの時点で完了していないと前方後、生じたろ過ではなく、着信要求をフィルタリングしますより長い遅延を要求します。一方、チェックサムを実行することにより、精密サービスゲートウェイアプリケーション側が複雑なフィルタともそれに応じて縮小されたインターフェイスの開発とマイクロサービスアプリケーションのテストの複雑さを行うインターセプタ、種々ので除去することができます。

:APIゲートウェイを要求するクライアントのチェックを達成するために、我々は別の春クラウドZuulのコア機能を使用する必要がありますフィルタを

Zuulは、開発者がフィルタに実装される方法を定義することにより、要求をインターセプトし、フィルタするAPIゲートウェイを実装することを可能にする非常に簡単で、我々は唯一のZuulFilter抽象クラスを継承し、それが4つの抽象関数を定義して実装する必要が要求の傍受を完了することができますそして濾過しました。

フィルタを実装します

次のコード例では、アクセスが拒否されない場合、不正なエラー401を返す。され、ルーティングされた場合、我々は、リクエストパラメータのHttpServletRequest accessToken前ルートかどうかをチェックすることで実現する単純なZuulフィルタを定義

 

 

上記のコードで実装フィルタは、我々が継承するZuulFilter抽象クラスをし、カスタムフィルタを実装するために、次の4つのメソッドをオーバーライドします。これら4つのメソッドが定義されました。

  • filterType:要求の中にライフサイクルの決定の実施をフィルタリングするフィルタの種類、。ここで定義されたpre要求がルーティングされる前代表が実行されます。
  • filterOrder:実行次フィルタ。多段フィルタに要求があった場合、それは順次メソッドによって返される値に応じて実行される必要があります。
  • shouldFilter:フィルタを実行する必要があるかどうかを決定します。ここでは、直接返すtrueので、フィルタはすべてのリクエストに有効になります。実用的なアプリケーションでは、我々は有効な範囲フィルタを指定するには、この機能を使用することができます。
  • run:指定された論理フィルタ。ここでは、ローパスctx.setSendZuulResponse(false)フィルタzuulは、要求を行うルーティングされていない、そしてctx.setResponseStatusCode(401)もちろん、我々はさらに、例えば、返品を最適化することができ、それが返す誤ったコードを設定しctx.setResponseBody(body)、リターン本文の内容を編集します。

カスタムフィルタの実現において、それが直接反映されません、我々はまた、例えば、フィルタを起動するには、次の主要なカテゴリのアプリケーションの増加を特定のBeanを作成する必要があります。

 

 

うちapi-gatewayサービスは上記の変換を完了した後、我々はそれを再起動して、以下の要求、検証を行うために上記で定義されたフィルタを開始することができます。

  • http://localhost:1101/api-a/hello:401エラーを返します。
  • http://localhost:1101/api-a/hello&accessToken=token:適切にルーティングされたインターフェイスとリターンhello-service/helloHello World

ここでは、フィルタ春クラウドZuulの基本的な機能は紹介してください。制限機能を要求し、署名検証、検証機関:読者は、次のような一般的な要求のフィルタリングとブロックのいくつかの非ビジネス・ロジックの実装のサービスゲートウェイに自分のニーズに応じて定義することができます。

おすすめ

転載: www.cnblogs.com/yxj9536/p/11459123.html