在一个系统中,常常须要对特定路由进行特定操做,而微服务中网关过滤器便起到了原来单体应用中过滤器做用,对请求进行处理,本文主要介绍Spring Cloud Gateway
中过滤器的基本概念,以及入门使用。html
一、Gateway中Filter生命周期只有两个阶段:pre和post
pre:请求在路由以前被调用,咱们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等
post:在路由到微服务之后执行。这种过滤器可用来为响应添加标准的HttpHeader、收集统计信息和指标、将响应从微服务发送给客户端等
spring
二、Spring Cloud Gateway
的 Filter
分为两种:GatewayFilter
与 GlobalFilter
。GlobalFilter
会应用到全部的路由上,而 GatewayFilter
将应用到单个路由或者一个分组的路由上。bash
Spring Cloud Gateway
中提供了不少自带的过滤器工厂使用。咱们能够使用其完成各类操做。
例如:使用AddRequestParameter GatewayFilter Factory
给特定请求添加参数(此处使用此方法的前提是网关已经注册到服务中心)app
在网关微服务中添加以下配置,对请求为Get方式的路由进行拦截添加参数foo=bar,并转发到uri中ide
#此处须要注意网关服务开启须要配置spring.cloud.gateway.discovery.locator.enabled: true
spring:
cloud:
gateway:
routes:
# =====================================
- id: add_request_parameter_route
uri: http://localhost:8003/provider/test
filters:
- AddRequestParameter=foo, bar
predicates:
- Method=GET
复制代码
在provider微服务中添加http://localhost:8003/provider/test路由方法微服务
@RestController
@RequestMapping("/provider")
public class TestController {
@Value("${server.port}")
private String addr;
//此处须要参数名同为foo才能接受参数foo=bar
@GetMapping("/test")
public String test(String foo){
String relstr= "来自服务提供者:"+addr+" foo:"+foo;
return relstr;
}
}
复制代码
启动网关服务(9001)和provider
微服务(8003),以任意路由用Get方式请求网关,测试:如图可知访问成功且参数添加成功 post
application.yml测试
spring:
cloud:
gateway:
routes:
# 为匹配路由请求添加请求头X-Request-Foo, Bar
- id: add_request_header_route
uri: http://example.org
filters:
- AddRequestHeader=X-Request-Foo, Bar
复制代码
application.ymlui
spring:
cloud:
gateway:
routes:
# 为匹配路由请求添加响应头X-Response-Foo , Bar
- id:add_request_header_route
uri:http://example.org
过滤器:
- AddResponseHeader = X-Response-Foo , Bar
复制代码
application.ymlspa
spring:
cloud:
gateway:
routes:
#
- id:hytstrix_route
uri:http://example.org
过滤器:
- Hystrix = myCommandName
复制代码
参考官方文档