AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

實戰Spring Cloud Gateway自定義謂詞及網關過濾器

來源: 責編: 時間:2024-04-03 09:11:09 225觀看
導讀環境:SpringBoot2.7.12 + SpringCloud2021.0.71. 簡介Spring Cloud Gateway 中,路由斷言(predicates)和過濾器(filters)是兩個核心概念,它們共同決定了如何處理進入網關的請求。謂詞工廠謂詞工廠用于定義路由斷言。斷言是路

環境:SpringBoot2.7.12 + SpringCloud2021.0.7Obm28資訊網——每日最新資訊28at.com

1. 簡介

Spring Cloud Gateway 中,路由斷言(predicates)和過濾器(filters)是兩個核心概念,它們共同決定了如何處理進入網關的請求。Obm28資訊網——每日最新資訊28at.com

謂詞工廠

謂詞工廠用于定義路由斷言。斷言是路由的一個條件,只有當條件滿足時,請求才會被路由到指定的服務。Spring Cloud Gateway 提供了一系列的內置斷言,例如基于路徑、請求頭、請求方法等的斷言。然而,如果你需要實現一些特定的業務邏輯或自定義條件,你可以創建自定義的謂詞工廠。Obm28資訊網——每日最新資訊28at.com

自定義謂詞工廠通常需要實現 org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory 或其子類,并定義斷言的條件。在創建自定義謂詞工廠時,你需要指定謂詞的名字、配置類以及斷言的匹配邏輯。Obm28資訊網——每日最新資訊28at.com

例如,你可以創建一個自定義謂詞工廠來檢查請求中是否包含特定的自定義請求頭。Obm28資訊網——每日最新資訊28at.com

網關過濾器工廠

網關過濾器工廠用于定義在路由匹配后應用于請求的過濾器。這些過濾器可以對請求和響應進行修改,例如添加請求頭、修改響應體或進行身份驗證等。Spring Cloud Gateway 同樣提供了一系列的內置過濾器,但同樣,如果你需要實現特定的業務邏輯或自定義處理,你可以創建自定義的網關過濾器工廠。Obm28資訊網——每日最新資訊28at.com

自定義網關過濾器工廠通常需要實現 org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory,并定義過濾器的邏輯。你可以在這里編寫 Java 代碼來實現對請求和響應的自定義處理。Obm28資訊網——每日最新資訊28at.com

例如,你可以創建一個自定義網關過濾器工廠來記錄每個請求的詳細信息,或者根據特定的業務邏輯修改響應的內容。Obm28資訊網——每日最新資訊28at.com

2. 實戰案例

2.1 自定義謂詞工廠

該謂詞工廠的作用檢查請求參數及header中個性化的信息。Obm28資訊網——每日最新資訊28at.com

@Componentpublic class ParamHeaderRoutePredicateFactory extends AbstractRoutePredicateFactory<ParamHeaderRoutePredicateFactory.Config> {    public static final String PARAM_KEY = "param";  public static final String HEADER_KEY = "header" ;  public static final String PARAM_VALUE = "pv" ;  public static final String HEADER_VALUE = "hv" ;    public ParamHeaderRoutePredicateFactory() {    super(Config.class);  }  @Override  public List<String> shortcutFieldOrder() {    return Arrays.asList(PARAM_KEY, PARAM_VALUE, HEADER_KEY, HEADER_VALUE) ;  }  @Override  public Predicate<ServerWebExchange> apply(Config config) {    return new GatewayPredicate() {      @Override      public boolean test(ServerWebExchange t) {        String pv = t.getRequest().getQueryParams().getFirst(config.param) ;        String hv = t.getRequest().getHeaders().getFirst(config.header) ;        System.err.printf("請求參數: %s=%s, 請求頭: %s=%s%n", config.param, pv, config.header, hv) ;        return config.pv.equals(pv) && config.hv.equals(hv) ;      }    } ;  }    // 驗證配置參數  @Validated  public static class Config {    @NotEmpty(message = "參數param不能為空")    private String param ;    @NotEmpty(message = "請求header不能為空")    private String header ;    private String pv ;    private String hv ;    // getter, setter  }}

使用Obm28資訊網——每日最新資訊28at.com

spring:  cloud:    gateway:      default-filters:      - StripPrefix=1       routes:                 - id: pack-lbs-1        uri: packlb://cloudAppServiceProvider        predicates:        #- ParamHeader=q,java,v,1        - name: ParamHeader          args:            param: q            pv: java            header: v            hv: 1

請求中的q參數值必須是java,請求header中的v值必須是1,才會匹配該路徑。Obm28資訊網——每日最新資訊28at.com

圖片圖片Obm28資訊網——每日最新資訊28at.com

2.2 自定義網關過濾器工廠

該過濾器的功能是改寫請求參數信息。Obm28資訊網——每日最新資訊28at.com

@Componentpublic class CustomGatewayFilterFactory extends AbstractGatewayFilterFactory<Config> {    public CustomGatewayFilterFactory() {    super(Config.class) ;  }    @Override  public List<String> shortcutFieldOrder() {    return super.shortcutFieldOrder() ;  }  @Override  public GatewayFilter apply(Config config) {    return (exchange, chain) -> {      Route r = exchange.getAttribute(GATEWAY_ROUTE_ATTR) ;      Map<String,Object> metadata = r.getMetadata() ;      System.out.println(metadata) ;            ServerHttpRequest request = exchange.getRequest() ;      URI uri = request.getURI() ;        // 獲取idNo參數,改寫請求參數idNo數值      MultiValueMap<String, String> queryParams = request.getQueryParams();      String idNo = queryParams.getFirst("idNo") ;      // 對idNo參數進行解密操作(只是演示)      idNo = idNo + "-new" ;      // 這里為了演示簡單,不考慮多個參數的情況      String query = "idNo=" + idNo ;      System.out.println(uri) ;      URI newUri = UriComponentsBuilder.fromUri(uri).replaceQuery(query).build(true).toUri() ;      System.out.println(newUri) ;      Builder builder = request.mutate().uri(newUri) ;      return chain.filter(exchange.mutate().request(builder.build()).build()) ;    };  }  public static class Config {  }}

使用Obm28資訊網——每日最新資訊28at.com

spring:  cloud:    gateway:      routes:      - id: demo-service-01        uri: http://localhost:8088        predicates:        - name: Path          args:            a: /api-x/**        filters:        - name: Custom

測試Obm28資訊網——每日最新資訊28at.com

圖片圖片Obm28資訊網——每日最新資訊28at.com

Spring Cloud Gateway 的自定義謂詞工廠和網關過濾器工廠為開發者提供了靈活性和擴展性,使得開發者可以根據業務需求自定義路由條件和請求處理邏輯。通過實現這些自定義組件,你可以輕松地構建出滿足特定業務需求的 API 網關。Obm28資訊網——每日最新資訊28at.com

以上是本篇文章全部內容,希望對你有幫助。Obm28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-81064-0.html實戰Spring Cloud Gateway自定義謂詞及網關過濾器

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 使用Kafka構建實時音樂排行榜系統,你學會了嗎?

下一篇: gSASRec : 利用負采樣降低序列推薦中的過度自信問題

標簽:
  • 熱門焦點
Top