springcloud gateway简介 filters(三)

6. GatewayFilter 过滤器

路由过滤器允许以某种方式修改传入 HTTP 请求或传出 HTTP 响应。路由过滤器的作用域是特定的路由。Spring Cloud Gateway 包括许多内置的网关过滤器工厂。有关如何使用以下过滤器的更详细示例,请参阅unit tests 单元测试

6.1 AddRequestHeader 过滤器

AddRequestHeader过滤器使用两个参数(name && value )

Example 13. application.yml

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

这个路由所有匹配请求的下游请求的头部中添加了 X-Request-red: blue。
AddRequestHeader通常用户匹配请求路径或者host中的变量。下面的例子中会将诸如 https://xxx.org/red/snzz 中的 snzz 放入 X-Request-red的value中。

Example 14. application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_header_route
        uri: https://example.org
        predicates:
        - Path=/red/{
     segment}
        filters:
        - AddRequestHeader=X-Request-Red, Blue-{
     segment}

6.2. AddRequestParameter 添加参数过滤器

AddRequestParameter过滤器接受 namevalue参数

Example 15. application.yml

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

上面的例子中为所有请求的下游请求的查询字符串red=blue
通常用于为指定请求路径或者域名的请求中添加请求参数,下面的例子中。会为myhost.org域名下的所有请求加上一个参数,假如访问的是dev.myhost.org,那么请求中就会加上一个foo=bar-dev的参数。

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_parameter_route
        uri: https://example.org
        predicates:
        - Host: {
     segment}.myhost.org
        filters:
        - AddRequestParameter=foo, bar-{
     segment}

6.3 Addresponseheader 过滤器

AddResponseHeader 采用 namevalue 参数:

Example 17. application.yml

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

这将为所有匹配请求的下游响应头添加 X-Response-Red: Bar 头。
通常用于为指定请求路径或者域名的请求响应的消息头添加参数,下面的例子中。会为myhost.org域名下的所有请求响应体的头部加上一个参数,假如访问的是dev.myhost.org,那么响应头中就会加上一个foo=bar-dev的参数。

spring:
  cloud:
    gateway:
      routes:
      - id: add_response_header_route
        uri: https://example.org
        predicates:
        - Host: {
     segment}.myhost.org
        filters:
        - AddResponseHeader=foo, bar-{
     segment}

6.4 DedupeResponseHeader 去重响应过滤器

DedupeResponseHeader接受一个name参数和一个可选的strategy 参数。Name可以包含以空格分隔的header名称列表。

Example 19. application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: dedupe_response_header_route
        uri: https://example.org
        filters:
        - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

在网关 CORS 逻辑和下游逻辑都添加了Access-Control-Allow-CredentialsAccess-Control-Allow-Origin响应头的情况下,这将删除重复的值。
DedupeResponseHeader过滤器还接受一个可选的策略参数。接受的值是 RETAIN_FIRST (默认值:保留第一个)、 RETAIN_FIRST (保留最后一个)和 RETAIN_UNIQUE(保留唯一的)。

6.5 Spring Cloud CircuitBreaker

Spring Cloud 断路器网关过滤器工厂使用 Spring Cloud 断路器 api 将网关路由包裹在断路器中。 支持多个可以与 Spring 云网关一起使用的库。 Spring Cloud 开箱即用地支持Resilience4J
要启用 Spring Cloud CircuitBreaker 过滤器,需要将 Spring-Cloud-starter-CircuitBreaker-reactor-resilience4j 放在类路径上。

Example 20. application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: circuitbreaker_route
        uri: https://example.org
        filters:
        - CircuitBreaker=myCircuitBreaker

可以参考下面的API文档来配置这个断路器。Resilience4J Documentation

6.28 上面太多了,暂不一一说明,后续有时间了再补充

6.29 默认过滤器

你可以声明spring.cloud.gateway.default-filters来为所有的路由添加过滤器,这个属性是一个list。

Example 51. application.yml

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

上面的配置会为httpbin请求路径下的请求的ResponseHeader中加入参数X-Response-Default-Red=Default-Blue

你可能感兴趣的:(gateway,网关)