【SpringCloud】Gateway Filter的使用(十九)


Gateway Filter介紹

  Filter,在“pre”類型的過濾器可以做參數校驗、權限校驗、流量監控、日志輸出、協議轉換等,在“post”類型的過濾器中可以做響應內容、響應頭的修改,日志的輸出、流量監控等,有非常重要的作用

  Filter除了分為“pre”和“post”兩種方式的Filter外,在Spring Cloud Gateway中,Filter從作用范圍可分為另外兩種,一種是針對於單個路由的Gateway Filter,它在配置文件中的寫法同predict類似;另外一種是針對於所有路由的Global Gateway Filer。現在從作用范圍划分的維度來講解這兩種Filer。

Gateway Filter的使用

1、單個路由的Gateway Filter用法

  參考官網:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/#gatewayfilter-factories

2、Global Gateway Filer用法

  當請求與路由匹配時,過濾Web處理程序會將的所有實例GlobalFilter和所有特定GatewayFilter於路由的實例添加到過濾器鏈中。該組合的過濾器鏈按org.springframework.core.Ordered接口排序,您可以通過實現該getOrder()方法進行設置。

  由於Spring Cloud Gateway區分了執行過濾器邏輯的“前”階段和“后”階段,因此優先級最高的過濾器是“前”階段的第一個,而“后”階段的最后一個。

  演示項目使用【SpringCloud】Gateway路由配置(十七)節的代碼示例

  1)在springcloud-gateway-gateway9527網關模塊中,新建Filter實現接口 GlobalFilter, Ordered 

 1 @Component
 2 @Slf4j
 3 public class MyLogGateWayFilter implements GlobalFilter, Ordered {
 4     @Override
 5     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
 6         log.info("=========Come in MyLogGateWayFilter: " + new Date() + "==========");
 7         String 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

    正常訪問:

    

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM