过滤器 MapRequestHeader · SpringCloud微服务实战 · 看云

1. 过滤器 MapRequestHeader

导航

MapRequestHeader GatewayFilter 工厂采用两个参数:fromHeader 和 toHeader.

本节代码地址


1.1 应用配置

配种中设置谓词的After 类型,如果不设置谓词会报错,我们将MapRequestHeader的两个参数分别设置值,最终第一个参数的值会拼在第二个参数后面。如果需要继续请求,那么在后面的服务接收到的Header值就会是新拼接的数据值。

server:
  port: 8699
spring:
  application:
    name: fw-gateways-gateway
  profiles:
    active: map_request_header_route
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
---
spring:
  cloud:
    gateway:
      routes:
        - id: map_request_header_route
          uri: lb://fw-cloud-ribbon-server
          predicates:
          - After=2020-01-08T18:30:11.965+08:00[Asia/Shanghai]
          filters:
          - MapRequestHeader=Blue, X-Request-Red
  profiles: map_request_header_route

说明: fromHeader 和 toHeader 在上例中分别为 Blue 和 X-Request-Red .

1.2 fw-cloud-ribbon-server 服务端添加接收方法

这个方法中我们从Header中获取参数为HostBlueX-Request-Red并将其打印到控制台中。


@GetMapping("/header")
public String header(@RequestHeader(value = "Host", required = false)  String host,
                     @RequestHeader(value = "Blue", required = false)  String blue,
                     @RequestHeader(value = "X-Request-Red", required = false)  String requestRed) {

    StringBuilder sp=new StringBuilder();
    if(StrUtil.isNotBlank(host)){
        sp.append("Host:").append(host).append(System.lineSeparator());
    }
    if(StrUtil.isNotBlank(host)){
        sp.append("Blue:").append(blue).append(System.lineSeparator());
    }
    if(StrUtil.isNotBlank(host)){
        sp.append("X-Request-Red:").append(requestRed).append(System.lineSeparator());
    }
    return sp.toString();
}

1.3 应用启动

我们下面来测试一下,Postman 输入
localhost:8699/user/header

d51e7ffb4bc7d086138f99555764d69e_MD5.png