1、RedirectTo GatewayFilter
RedirectTo GatewayFilter接受两个参数,状态和url。状态参数应该是一个300系列的重定向HTTP代码,例如301。url参数应该是一个有效的url。这是Location标头的值。对于相对重定向,应该使用uri:no://op作为路由定义的uri。例如:
spring:
cloud:
gateway:
enabled: true
routes:
- id: Goods-Server # 路由 id,唯一标识
uri: lb://producer
predicates:
# - Path=/** # 断言,路由匹配条件,匹配 /product 开头的所有 api
- Path=/producer/{segment}
filters:
- StripPrefix=1
- RedirectTo=302, https://www.baidu.com
访问http://localhost:8500/producer/hello,将重定向到https://www.baidu.com。
2、RemoveRequestHeader GatewayFilter
RemoveRequestHeader GatewayFilter删除指定的请求头。
spring:
cloud:
gateway:
enabled: true
routes:
- id: Goods-Server # 路由 id,唯一标识
uri: lb://producer
predicates:
# - Path=/** # 断言,路由匹配条件,匹配 /product 开头的所有 api
- Path=/producer/{segment}
filters:
- StripPrefix=1
- RemoveRequestHeader=X-Request-Foo
用Postman访问http://localhost:8500/producer/hello,
从Producer模块的控制台看到System.out.println(request.getHeader("X-Request-Foo"));获取请求头为null。
3、RemoveResponseHeader GatewayFilter
RemoveResponseHeader GatewayFilter移除响应头。
spring:
cloud:
gateway:
enabled: true
routes:
- id: Goods-Server # 路由 id,唯一标识
uri: lb://producer
predicates:
# - Path=/** # 断言,路由匹配条件,匹配 /product 开头的所有 api
- Path=/producer/{segment}
filters:
- StripPrefix=1
- RemoveResponseHeader=X-Response-Foo
在修改Producer的Controller:
@RequestMapping("/hello")
public String hello(String name, HttpServletRequest request, HttpServletResponse response) {
response.setHeader("X-Response-Foo","123");
return "hello," + name + "," + port;
}
访问http://localhost:8500/producer/hello,从浏览器控制台看到没有X-Response-Foo响应头。将RemoveResponseHeader注释掉,在访问http://localhost:8500/producer/hello,看到
4、RemoveRequestParameter GatewayFilter
RemoveRequestParameter GatewayFilter会移除指定的请求参数。
spring:
cloud:
gateway:
enabled: true
routes:
- id: Goods-Server # 路由 id,唯一标识
uri: lb://producer
predicates:
# - Path=/** # 断言,路由匹配条件,匹配 /product 开头的所有 api
- Path=/producer/{segment}
filters:
- StripPrefix=1
- RemoveRequestParameter=red
修改Producer服务的Controller:
@RequestMapping("/hello")
public String hello(String name, HttpServletRequest request, HttpServletResponse response) {
System.out.println(request.getParameter("red"));
return "hello," + name + "," + port;
}
访问http://localhost:8500/producer/hello?red=123,看到Producer控制台显示null。将RemoveRequestParameter注释。在访问http://localhost:8500/producer/hello?red=123,看到Producer控制台显示123。
5、RewritePath GatewayFilter
RewritePath GatewayFilter采用一个路径regexp参数和一个替换参数。这使用Java正则表达式来灵活地重写请求路径。
spring:
cloud:
gateway:
enabled: true
routes:
- id: Goods-Server # 路由 id,唯一标识
uri: lb://producer
predicates:
# - Path=/** # 断言,路由匹配条件,匹配 /product 开头的所有 api
- Path=/producer/{segment}
filters:
- StripPrefix=1
- RewritePath=/red, /hello
将/producer/red替换成/producer/hello。访问http://localhost:8500/producer/red,看到hello,null,8002。