官方文档:Spring Cloud Gateway
内置过滤器工厂
AddRequestHeaderGatewayFilterFactory
为请求添加Header Header的名称及值
配置说明
java
server:
port: 8088
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8847
username: nacos
password: nacos
gateway:
routes:
- id: order_route # 路由唯一标识
#uri: http://localhost:8020 # 需要转发的地址
uri: lb://order-service # 需要转发的地址
# 断言规则 用于路由规则的匹配
predicates:
# - Path=/order-serv/**
# - After=2024-01-01T23:00:11.518+08:00[Asia/Shanghai]
# - Before=2025-01-01T23:00:11.518+08:00[Asia/Shanghai]
- Between=2024-01-01T23:00:11.518+08:00[Asia/Shanghai],2025-01-01T23:00:11.518+08:00[Asia/Shanghai]
# - Header=X-Request-Id,\d+
# - Host=127.0.0.1
# - Query=name,lq
# - Method=GET,POST
# http://localhost:8088/order-serv/order/add => http://localhost:8020/order-serv/order/add
- Demo=YES
#配置过滤器工厂
filters:
- StripPrefix=1 # 转发去掉第一层路径
- AddRequestHeader=X-Request-name,tom #添加请求头
# http://localhost:8020/order-serv/order/add => http://localhost:8020/order/add
代码编写
java
package com.learning.springcloud.gateway.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
@Slf4j
@RequestMapping("/gateway")
public class GatewayController {
@GetMapping("/test")
public String testGateway(HttpServletRequest request) throws Exception {
return "success => gateWay-test 获取请求头X-Request-name:" + request.getHeader("X-Request-name");
}
@GetMapping("/test2")
public String testGateway(@RequestHeader("X-Request-name") String name) throws Exception {
return "success => gateWay-test2 获取请求头X-Request-name:" + name;
}
}
访问效果
AddRequestParameterGatewayFilterFactory
为请求添加参数的名称及值
配置说明
java
filters:
- StripPrefix=1 # 转发去掉第一层路径
- AddRequestHeader=X-Request-name,tom #添加请求头
- AddRequestParameter=color, blue # 添加请求参数
代码编写
java
@GetMapping("/test3")
public String testGateway3(@RequestParam("color") String color) throws Exception {
log.info("gateWay-get 获取请求参数color:" + color);
return "success => gateWay-get 获取请求参数color:" + color;
}
访问效果
PrefixPathGatewayFilterFactory
增加项目路径的过滤器
配置说明
java
# order-service 服务配置
server:
port: 8020
servlet:
context-path: /demo
# 网关配置
filters:
- StripPrefix=1 # 转发去掉第一层路径
- AddRequestHeader=X-Request-name,tom #添加请求头
- AddRequestParameter=color, blue # 添加请求参数
- PrefixPath=/demo
访问效果
- 不携带 配置的项目路径 demo 是无法访问的
- 携带配置的项目路径demo是可以访问的
- 通过网关访问不携带项目路径demo 可以正常访问
RedirectToGatewayFilterFactory
重定向过滤器,两个参数:HTTP状态码 和 重定向的目标地址
配置说明
java
#配置过滤器工厂
filters:
- StripPrefix=1 # 转发去掉第一层路径
- AddRequestHeader=X-Request-name,tom #添加请求头
- AddRequestParameter=color, blue # 添加请求参数
- PrefixPath=/demo
- RedirectTo=302, https://www.baidu.com/ #重定向到百度