JavaのバージョンB2B2Cのソーシャル電気の供給春の雲分布するマイクロ - サービスゲートウェイフィルタ

効果フィルタ
マイクロサービスアプリケーションへのインタフェースを統一APIゲートウェイエントリを介して提供することができへのクライアントアクセスです。しかし、多くの場合、一定の制限へのアクセスを必要とするユーザー・インターフェース・マイクロ回路アプリケーションによって要求された各クライアントサービスは、システムはマイクロサービス・インターフェースのすべてが彼らに開放されてなりません。しかし、現在のサービス・ルーティング機能は、このような権利を制限するものではありませんが、予約なしで、すべての要求は、特定のアプリケーションに転送し、結果を返し、セキュリティチェックを実現し、クライアントから要求されたアクセス権を制御するために、最もシンプルかつ残忍されます各サービスアプリケーションが署名を検証し、アクセス権のセットを識別するために、マイクロフィルタまたはインターセプタを実装するための方法です。

しかし、このアプローチは望ましいことではない、それは多くの場合、検証ロジックの同じ様々な環境下でシステムは、実質的に同一または類似しているとして、このような実装は、同様のチェックになるだろう、将来的にシステムを維持することの難しさを増加しますロジック・コードはマイクロに様々なサービスに配信され、冗長なコードは、我々は見たくないということです表示されます。そのため、良い方法は、別々の認証サービスを構築するためにチェックロジックをスピンオフすることです。分離が完了した後、多くの開発者は、認証サービスを呼び出すことにより、パリティを達成するためのマイクロサービスアプリケーションに直接になりますが、本質的には、このようなアプローチは、単に認証ロジックの分離を解決することであり、この部分ではありません、アマチュアは、元の論理マイクロサービスアプリケーション、冗長ブロッカーまたはフィルターがまだ存在して分割しません。

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

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

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

フィルタを実装し
、次のコードとして、我々は、要求がルーティングされている場合ではない場合のHttpServletRequest accessTokenパラメータ前に経路が、アクセスが拒否されたか否かを確認することで実現する単純なZuulフィルタを、定義された不正401を返しますエラー。

パブリック クラス AccessFilterは延びZuulFilter {
 プライベート 静的ロガーログ= LoggerFactory.getLogger(AccessFilter クラス)。
@Override 
パブリック文字列のfilterType(){
 戻り「プレ」
} 
@Override 
公共 INT filterOrder(){
 戻り 0 
} 
@Override 
パブリック ブールshouldFilter(){
 戻り 
} 
@Override 
パブリックオブジェクトラン(){ 
RequestContextのCTX =RequestContext.getCurrentContext(); 
HttpServletRequestのリクエスト = ctx.getRequest()。
log.info( "送信{}要求に{}" 。、request.getMethod()、request.getRequestURL()のtoString())。
オブジェクトaccessToken = request.getParameter( "accessToken" )。
もし(accessToken == NULL ){ 
log.warn( "アクセストークンが空です" )。
ctx.setSendZuulResponse(); 
ctx.setResponseStatusCode( 401 )。
リターン ヌル
} 
log.info( "アクセストークンOK" )。
リターン ヌル
}
}

上記のコードで実装フィルタは、継承ZuulFilterを通じて、私たちは、カスタムフィルタを実装するための抽象クラスと、次の4つのメソッドを書き換えます。これら4つのメソッドが定義されました。

filterType:要求の中にライフサイクルの決定の実施をフィルタリングするフィルタの種類、。リクエストがルーティングされる前に、事前定義された通り、ここで、代表が実行されます。
filterOrder:実行順序フィルタ。多段フィルタに要求があった場合、それは順次メソッドによって返される値に応じて実行される必要があります。
shouldFilter:フィルタを実行する必要があるかどうかを判断します。ここでは、trueに直接返すので、フィルタはすべてのリクエストに有効になります。実用的なアプリケーションでは、我々は有効な範囲フィルタを指定するには、この機能を使用することができます。
実行:指定された論理フィルタを。ここでは、ctx.setSendZuulResponseを通してそれをルーティングせずに、要求をフィルタリング(偽)zuulをさせ、その後、ctx.setResponseStatusCode(401)によって返されたエラーコードを設定し、もちろん、我々はさらにCTXにより、例えば、返品を最適化することができますボディのコンテンツ編集を返すために.setResponseBody(ボディ)。
カスタムフィルタの実現において、それが直接反映されません、我々はまた、例えば、フィルタを起動するには、次の主要なカテゴリのアプリケーションの増加を特定のBeanを作成する必要があります。

@EnableZuulProxy 
@SpringCloudApplication 
パブリック クラスアプリケーション{
 公共 静的 ボイドメイン(文字列[]引数){
 新しい SpringApplicationBuilder(アプリケーションクラス).web().RUN(引数)。
} 
@Bean 
公共AccessFilter accessFilter(){
 戻り 新しい)(AccessFilterします。
} 
}

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

今から、私は春の雲の開発フレームワークに興味の友人の助けを持って、プロセスを構築し、マイクロサービスのクラウドアーキテクチャspringcloudレコードの最近の開発の本質にはこちらになります、私はより良い学者を助けるために願っています。私たちは、構築し、エンタープライズプロジェクトを適用する方法春のクラウドアーキテクチャの過程を探るために一緒に来ます。
3 5サン呂気まぐれIIチーII 5柔術:春の雲のB2B2Cの電子商取引のソーシャルプラットフォームのソースコード、ペンギンBEGを追加してください

おすすめ

転載: www.cnblogs.com/itcode-code/p/11198757.html