真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloudGateway內(nèi)置的過濾器工廠-創(chuàng)新互聯(lián)

本文基于Spring Cloud Greenwich SR2

創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信平臺小程序開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。

[TOC]


內(nèi)置的過濾器工廠

這里簡單將Spring Cloud Gateway內(nèi)置的所有過濾器工廠整理成了一張表格,雖然不是很詳細(xì),但能作為速覽使用。如下:

過濾器工廠作用參數(shù)
AddRequestHeader為原始請求添加HeaderHeader的名稱及值
AddRequestParameter為原始請求添加請求參數(shù)參數(shù)名稱及值
AddResponseHeader為原始響應(yīng)添加HeaderHeader的名稱及值
DedupeResponseHeader剔除響應(yīng)頭中重復(fù)的值需要去重的Header名稱及去重策略
Hystrix為路由引入Hystrix的斷路器保護(hù)HystrixCommand的名稱
FallbackHeaders為fallbackUri的請求頭中添加具體的異常信息Header的名稱
PrefixPath為原始請求路徑添加前綴前綴路徑
PreserveHostHeader為請求添加一個preserveHostHeader=true的屬性,路由過濾器會檢查該屬性以決定是否要發(fā)送原始的Host
RequestRateLimiter用于對請求限流,限流算法為令牌桶keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus
RedirectTo將原始請求重定向到指定的URLhttp狀態(tài)碼及重定向的url
RemoveHopByHopHeadersFilter為原始請求刪除IETF組織規(guī)定的一系列Header默認(rèn)就會啟用,可以通過配置指定僅刪除哪些Header
RemoveRequestHeader為原始請求刪除某個HeaderHeader名稱
RemoveResponseHeader為原始響應(yīng)刪除某個HeaderHeader名稱
RewritePath重寫原始的請求路徑原始路徑正則表達(dá)式以及重寫后路徑的正則表達(dá)式
RewriteResponseHeader重寫原始響應(yīng)中的某個HeaderHeader名稱,值的正則表達(dá)式,重寫后的值
SaveSession在轉(zhuǎn)發(fā)請求之前,強(qiáng)制執(zhí)行WebSession::save操作
secureHeaders為原始響應(yīng)添加一系列起安全作用的響應(yīng)頭無,支持修改這些安全響應(yīng)頭的值
SetPath修改原始的請求路徑修改后的路徑
SetResponseHeader修改原始響應(yīng)中某個Header的值Header名稱,修改后的值
SetStatus修改原始響應(yīng)的狀態(tài)碼HTTP 狀態(tài)碼,可以是數(shù)字,也可以是字符串
StripPrefix用于截斷原始請求的路徑使用數(shù)字表示要截斷的路徑的數(shù)量
Retry針對不同的響應(yīng)進(jìn)行重試retries、statuses、methods、series
RequestSize設(shè)置允許接收大請求包的大小。如果請求包大小超過設(shè)置的值,則返回413 Payload Too Large請求包大小,單位為字節(jié),默認(rèn)值為5M
ModifyRequestBody在轉(zhuǎn)發(fā)請求之前修改原始請求體內(nèi)容修改后的請求體內(nèi)容
ModifyResponseBody修改原始響應(yīng)體的內(nèi)容修改后的響應(yīng)體內(nèi)容
Default為所有路由添加過濾器過濾器工廠名稱及值

Tips:每個過濾器工廠都對應(yīng)一個實現(xiàn)類,并且這些類的名稱必須以GatewayFilterFactory結(jié)尾,這是Spring Cloud Gateway的一個約定,例如AddRequestHeader對應(yīng)的實現(xiàn)類為AddRequestHeaderGatewayFilterFactory。對源碼感興趣的小伙伴就可以按照這個規(guī)律拼接出具體的類名,以此查找這些內(nèi)置過濾器工廠的實現(xiàn)代碼


1、AddRequestHeader GatewayFilter Factory

為原始請求添加Header,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_header_route
        uri: https://example.org
        filters:
        - AddRequestHeader=X-Request-Foo, Bar

為原始請求添加名為X-Request-Foo,值為Bar的請求頭

2、AddRequestParameter GatewayFilter Factory

為原始請求添加請求參數(shù)及值,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_parameter_route
        uri: https://example.org
        filters:
        - AddRequestParameter=foo, bar

為原始請求添加名為foo,值為bar的參數(shù),即:foo=bar

3、AddResponseHeader GatewayFilter Factory

為原始響應(yīng)添加Header,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: add_response_header_route
        uri: https://example.org
        filters:
        - AddResponseHeader=X-Response-Foo, Bar

為原始響應(yīng)添加名為X-Request-Foo,值為Bar的響應(yīng)頭

4、DedupeResponseHeader GatewayFilter Factory

DedupeResponseHeader可以根據(jù)配置的Header名稱及去重策略剔除響應(yīng)頭中重復(fù)的值,這是Spring Cloud Greenwich SR2提供的新特性,低于這個版本無法使用。

我們在Gateway以及微服務(wù)上都設(shè)置了CORS(解決跨域)Header的話,如果不做任何配置,那么請求 -> 網(wǎng)關(guān) -> 微服務(wù),獲得的CORS Header的值,就將會是這樣的:

Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars

可以看到這兩個Header的值都重復(fù)了,若想把這兩個Header的值去重的話,就需要使用到DedupeResponseHeader,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: dedupe_response_header_route
        uri: https://example.org
        filters:
        # 若需要去重的Header有多個,使用空格分隔
        - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

去重策略:

  • RETAIN_FIRST:默認(rèn)值,保留第一個值
  • RETAIN_LAST:保留最后一個值
  • RETAIN_UNIQUE:保留所有唯一值,以它們第一次出現(xiàn)的順序保留

若想對該過濾器工廠有個比較全面的了解的話,建議閱讀該過濾器工廠的源碼,因為源碼里有詳細(xì)的注釋及示例,比官方文檔寫得還好:org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory

5、Hystrix GatewayFilter Factory

為路由引入Hystrix的斷路器保護(hù),配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: hystrix_route
        uri: https://example.org
        filters:
        - Hystrix=myCommandName

Hystrix是Spring Cloud第一代容錯組件,不過已經(jīng)進(jìn)入維護(hù)模式,未來Hystrix會被Spring Cloud移除掉,取而代之的是Alibaba Sentinel/Resilience4J。所以本文不做詳細(xì)介紹了,感興趣的話可以參考官方文檔:

  • Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory

同樣是對Hystrix的支持,上一小節(jié)所介紹的過濾器工廠支持一個配置參數(shù):fallbackUri,該配置用于當(dāng)發(fā)生異常時將請求轉(zhuǎn)發(fā)到一個特定的uri上。而FallbackHeaders這個過濾工廠可以在轉(zhuǎn)發(fā)請求到該uri時添加一個Header,這個Header的值為具體的異常信息。配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: ingredients
        uri: lb://ingredients
        predicates:
        - Path=//ingredients/**
        filters:
        - name: Hystrix
          args:
            name: fetchIngredients
            fallbackUri: forward:/fallback
      - id: ingredients-fallback
        uri: http://localhost:9994
        predicates:
        - Path=/fallback
        filters:
        - name: FallbackHeaders
          args:
            executionExceptionTypeHeaderName: Test-Header

這里也不做詳細(xì)介紹了,感興趣可以參考官方文檔:

  • FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory

為原始的請求路徑添加一個前綴路徑,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: prefixpath_route
        uri: https://example.org
        filters:
        - PrefixPath=/mypath

該配置使訪問${GATEWAY_URL}/hello會轉(zhuǎn)發(fā)到https://example.org/mypath/hello

8、PreserveHostHeader GatewayFilter Factory

為請求添加一個preserveHostHeader=true的屬性,路由過濾器會檢查該屬性以決定是否要發(fā)送原始的Host Header。配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: preserve_host_route
        uri: https://example.org
        filters:
        - PreserveHostHeader

如果不設(shè)置,那么名為Host的Header將由Http Client控制

9、RequestRateLimiter GatewayFilter Factory

用于對請求進(jìn)行限流,限流算法為令牌桶。配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: requestratelimiter_route
        uri: https://example.org
        filters:
        - name: RequestRateLimiter
          args:
            redis-rate-limiter.replenishRate: 10
            redis-rate-limiter.burstCapacity: 20

由于另一篇文章中已經(jīng)介紹過如何使用該過濾器工廠實現(xiàn)網(wǎng)關(guān)限流,所以這里就不再贅述了:

  • Spring Cloud Gateway - 擴(kuò)展

或者參考官方文檔:

  • RequestRateLimiter GatewayFilter Factory
10、RedirectTo GatewayFilter Factory

將原始請求重定向到指定的Url,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: redirect_route
        uri: https://example.org
        filters:
        - RedirectTo=302, https://acme.org

該配置使訪問${GATEWAY_URL}/hello會被重定向到https://acme.org/hello,并且攜帶一個Location:http://acme.org的Header,而返回客戶端的HTTP狀態(tài)碼為302

注意事項:

  • HTTP狀態(tài)碼應(yīng)為3xx,例如301
  • URL必須是合法的URL,該URL會作為LocationHeader的值
11、RemoveHopByHopHeadersFilter GatewayFilter Factory

為原始請求刪除IETF組織規(guī)定的一系列Header,默認(rèn)刪除的Header如下:

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding
  • Upgrade

可以通過配置去指定僅刪除哪些Header,配置示例:

spring:
  cloud:
    gateway:
      filter:
        remove-hop-by-hop:
          # 多個Header使用逗號(,)分隔
          headers: Connection,Keep-Alive
12、RemoveRequestHeader GatewayFilter Factory

為原始請求刪除某個Header,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: removerequestheader_route
        uri: https://example.org
        filters:
        - RemoveRequestHeader=X-Request-Foo

刪除原始請求中名為X-Request-Foo的請求頭

13、RemoveResponseHeader GatewayFilter Factory

為原始響應(yīng)刪除某個Header,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: removeresponseheader_route
        uri: https://example.org
        filters:
        - RemoveResponseHeader=X-Response-Foo

刪除原始響應(yīng)中名為X-Request-Foo的響應(yīng)頭

14、RewritePath GatewayFilter Factory

通過正則表達(dá)式重寫原始的請求路徑,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: rewritepath_route
        uri: https://example.org
        predicates:
        - Path=/foo/**
        filters:
        # 參數(shù)1為原始路徑的正則表達(dá)式,參數(shù)2為重寫后路徑的正則表達(dá)式
        - RewritePath=/foo/(?.*), /$\{segment}

該配置使得訪問/foo/bar時,會將路徑重寫為/bar再進(jìn)行轉(zhuǎn)發(fā),也就是會轉(zhuǎn)發(fā)到https://example.org/bar。需要注意的是:由于YAML語法,需用$\替換$

15、RewriteResponseHeader GatewayFilter Factory

重寫原始響應(yīng)中的某個Header,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: rewriteresponseheader_route
        uri: https://example.org
        filters:
        # 參數(shù)1為Header名稱,參數(shù)2為值的正則表達(dá)式,參數(shù)3為重寫后的值
        - RewriteResponseHeader=X-Response-Foo, password=[^&]+, password=***

該配置的意義在于:如果響應(yīng)頭中X-Response-Foo的值為/42?user=ford&password=omg!what&flag=true,那么就會被按照配置的值重寫成/42?user=ford&password=***&flag=true,也就是把其中的password=omg!what重寫成了password=***

16、SaveSession GatewayFilter Factory

在轉(zhuǎn)發(fā)請求之前,強(qiáng)制執(zhí)行WebSession::save操作,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: save_session
        uri: https://example.org
        predicates:
        - Path=/foo/**
        filters:
        - SaveSession

主要用在那種像 Spring Session 延遲數(shù)據(jù)存儲(數(shù)據(jù)不是立刻持久化)的,并希望在請求轉(zhuǎn)發(fā)前確保session狀態(tài)保存情況。如果你將Spring Secutiry于Spring Session集成使用,并想確保安全信息都傳到下游機(jī)器,你就需要配置這個filter。

17、secureHeaders GatewayFilter Factory

secureHeaders過濾器工廠主要是參考了這篇博客中的建議,為原始響應(yīng)添加了一系列起安全作用的響應(yīng)頭。默認(rèn)會添加如下Headers(包括值):

  • X-Xss-Protection:1; mode=block
  • Strict-Transport-Security:max-age=631138519
  • X-Frame-Options:DENY
  • X-Content-Type-Options:nosniff
  • Referrer-Policy:no-referrer
  • Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
  • X-Download-Options:noopen
  • X-Permitted-Cross-Domain-Policies:none

如果你想修改這些Header的值,那么就需要使用這些Headers對應(yīng)的后綴,如下:

  • xss-protection-header
  • strict-transport-security
  • frame-options
  • content-type-options
  • referrer-policy
  • content-security-policy
  • download-options
  • permitted-cross-domain-policies

配置示例:

spring:
  cloud:
    gateway:
      filter:
        secure-headers:
          # 修改 X-Xss-Protection 的值為 2; mode=unblock
          xss-protection-header: 2; mode=unblock

如果想禁用某些Header,可使用如下配置:

spring:
  cloud:
    gateway:
      filter:
        secure-headers:
          # 多個使用逗號(,)分隔
          disable: frame-options,download-options
18、SetPath GatewayFilter Factory

修改原始的請求路徑,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: setpath_route
        uri: https://example.org
        predicates:
        - Path=/foo/{segment}
        filters:
        - SetPath=/{segment}

該配置使訪問${GATEWAY_URL}/foo/bar時會轉(zhuǎn)發(fā)到https://example.org/bar,也就是原本的/foo/bar被修改為了/bar

19、SetResponseHeader GatewayFilter Factory

修改原始響應(yīng)中某個Header的值,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: setresponseheader_route
        uri: https://example.org
        filters:
        - SetResponseHeader=X-Response-Foo, Bar

將原始響應(yīng)中X-Response-Foo的值修改為Bar

20、SetStatus GatewayFilter Factory

修改原始響應(yīng)的狀態(tài)碼,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: setstatusstring_route
        uri: https://example.org
        filters:
        # 字符串形式
        - SetStatus=BAD_REQUEST
      - id: setstatusint_route
        uri: https://example.org
        filters:
        # 數(shù)字形式
        - SetStatus=401

SetStatusd的值可以是數(shù)字,也可以是字符串。但一定要是SpringHttpStatus枚舉類中的值。上面這兩種配置都可以返回401這個HTTP狀態(tài)碼。

21、StripPrefix GatewayFilter Factory

用于截斷原始請求的路徑,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: nameRoot
        uri: http://nameservice
        predicates:
        - Path=/name/**
        filters:
        # 數(shù)字表示要截斷的路徑的數(shù)量
        - StripPrefix=2

如上配置,如果請求的路徑為/name/bar/foo,那么則會截斷成/foo后進(jìn)行轉(zhuǎn)發(fā) ,也就是會截斷2個路徑。

22、Retry GatewayFilter Factory

針對不同的響應(yīng)進(jìn)行重試,例如可以針對HTTP狀態(tài)碼進(jìn)行重試,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: retry_test
        uri: http://localhost:8080/flakey
        predicates:
        - Host=*.retry.com
        filters:
        - name: Retry
          args:
            retries: 3
            statuses: BAD_GATEWAY

可配置如下參數(shù):

  • retries:重試次數(shù)
  • statuses:需要重試的狀態(tài)碼,取值在org.springframework.http.HttpStatus
  • methods:需要重試的請求方法,取值在org.springframework.http.HttpMethod
  • series:HTTP狀態(tài)碼序列,取值在org.springframework.http.HttpStatus.Series
23、RequestSize GatewayFilter Factory

設(shè)置允許接收大請求包的大小,配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: request_size_route
      uri: http://localhost:8080/upload
      predicates:
      - Path=/upload
      filters:
      - name: RequestSize
        args:
          # 單位為字節(jié)
          maxSize: 5000000

如果請求包大小超過設(shè)置的值,則會返回413 Payload Too Large以及一個errorMessage

24、Modify Request Body GatewayFilter Factory

在轉(zhuǎn)發(fā)請求之前修改原始請求體內(nèi)容,該過濾器工廠只能通過代碼配置,不支持在配置文件中配置。代碼示例:

@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("rewrite_request_obj", r -> r.host("*.rewriterequestobj.org")
            .filters(f -> f.prefixPath("/httpbin")
                .modifyRequestBody(String.class, Hello.class, MediaType.APPLICATION_JSON_VALUE,
                    (exchange, s) -> return Mono.just(new Hello(s.toUpperCase())))).uri(uri))
        .build();
}

static class Hello {
    String message;

    public Hello() { }

    public Hello(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

Tips:該過濾器工廠處于BETA狀態(tài),未來API可能會變化,生產(chǎn)環(huán)境請慎用

25、Modify Response Body GatewayFilter Factory

可用于修改原始響應(yīng)體的內(nèi)容,該過濾器工廠同樣只能通過代碼配置,不支持在配置文件中配置。代碼示例:

@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("rewrite_response_upper", r -> r.host("*.rewriteresponseupper.org")
            .filters(f -> f.prefixPath("/httpbin")
                .modifyResponseBody(String.class, String.class,
                    (exchange, s) -> Mono.just(s.toUpperCase()))).uri(uri)
        .build();
}

Tips:該過濾器工廠處于BETA狀態(tài),未來API可能會變化,生產(chǎn)環(huán)境請慎用

26、Default Filters

Default Filters用于為所有路由添加過濾器工廠,也就是說通過Default Filter所配置的過濾器工廠會作用到所有的路由上。配置示例:

spring:
  cloud:
    gateway:
      default-filters:
      - AddResponseHeader=X-Response-Default-Foo, Default-Bar
      - PrefixPath=/httpbin

官方文檔:

  • GatewayFilter Factories

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。


網(wǎng)站題目:SpringCloudGateway內(nèi)置的過濾器工廠-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/iseij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部