过滤器 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中获取参数为Host、Blue、X-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
