ゲートウェイフィルターの概要
フィルター、「pre」タイプのフィルターは、パラメーター検証、権限検証、トラフィックの監視、ログ出力、プロトコル変換などに使用できます。「post」タイプのフィルターは、応答コンテンツ、応答ヘッダー、ログの変更に使用できます出力、フロー監視など、非常に重要な役割があります
Spring Cloud Gatewayでは、「事前」と「事後」のフィルターに分けられるほか、アクションの範囲からフィルターを他の2つのタイプに分けることができます。1つは、構成ファイルにある単一ルートのゲートウェイフィルターです。の表現は予測に似ており、もう1つはすべてのルートのグローバルゲートウェイファイラーです。次に、これらの2つのファイラーについて、アクションスコープの側面から説明します。
ゲートウェイフィルターの使用
1.単一ルートのゲートウェイフィルターの使用
リファレンスの公式ウェブサイト:https : //cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/#gatewayfilter-factories
2.グローバルゲートウェイファイラーの使用
リクエストがルートと一致すると、フィルタリングWebハンドラーはGlobalFilterのすべてのインスタンスと特定のGatewayFilterのすべてのインスタンスをフィルターチェーンへのルートに追加します。結合されたフィルターチェーンはorg.springframework.core.Orderedインターフェースによってソートされ、getOrder()メソッドを実装することで設定できます。
Spring Cloud Gatewayは、フィルターロジックを実行する「前」ステージと「後」ステージを区別するため、優先度が最も高いフィルターは、「前」ステージの最初であり、「後」ステージの最後です。
デモプロジェクトでは、[SpringCloud]ゲートウェイルーティング構成(17)のコード例を使用しています
1)springcloud-gateway-gateway9527ゲートウェイモジュールで、新しいフィルターを作成して、インターフェースGlobalFilter、Orderedを実装します
1 @Component 2 @ SLF4J 3 パブリック クラス MyLogGateWayFilter 実装GlobalFilter、順序{ 4 @Override 5 公共モノ<ボイド> フィルタ(ServerWebExchange交換、GatewayFilterChain鎖){ 6 log.info(「=========に来MyLogGateWayFilter: "+ new Date()+" ========== " ); 7 文字列uname = exchange.getRequest()。getQueryParams()。getFirst( "uname" ); 8 if(uname == null ){ 9 log.info( "=========用户名是null、非法用户========" ); 10 exchange.getResponse()。setComplete(); 11 } 12 // 成功 13 return chain.filter(exchange); 14 } 15 16 @Override 17 public int getOrder(){ 18 return 0 ; 19 } 20 }
2)テスト
a。プロジェクトを開始する
b。訪問アドレス:http:// localhost:9527 / payment / get / 1
アクセスエラー、ログレコードに不正なユーザーが印刷される
c。アクセスアドレス:http:// localhost:9527 / payment / get / 1?uname = 1
通常のアクセス: