Spring Cloud Gateway是什么?用来解决什么问题?
Spring Cloud Gateway是Spring生态中的一个项目,称为网关。作用是将用户请求路由(Route)到相应的API接口;
在微服务项目中,网关也是一个微服务,网关也需要单独新建一个项目。
通过网关能够实现:
- 提供统一的请求入口;
- 对请求进行身份认证;
- 路由,最基本的功能;
- 负载均衡;
- 请求限流,限制流量请求;
网关工作原理

- 客户端向网关发起请求
- 网关处理映射确定请求与某个路由相匹配,将请求发送给网关web处理程序
- 过滤器链能够在请求之前和之后起到相应的作用
- 网关web处理程序,通过过滤器链后请求到相应的服务
如何引入Spring Cloud Gateway
注意:不支持以servlet为容器和WAR包部署的传统项目
POM文件中引入依赖spring-cloud-starter-gateway
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>4.0.2</version>
</dependency>网关配置文件bootstrap.yml
注意:
bootstrapstrap.yml是系统级的配置文件,优先级最高
application.yml是用户级的配置文件,优先级低于bootstrap.yml
spring:
cloud:
gateway:
routes:
- id: after_route #路由配置唯一标识,不可重复
# uri的配置写法有三种
# 1.http地址, 样例:http://www.baidu.com
# 2.websocket 样例:ws://www.baidu.com
# 3.微服务名称 样例:lb://baidu-service
uri: lb://service-name #路由地址,lb负载均衡标识。service-name表示微服务名称。
predicates: #断言
- path=/user/** #断言路由的匹配规则,请求是否符合规则。请求需要包含/user
filter:Predicate Factories 路由断言工厂
下表是一些常见配置,前端请求必须符合网关的约定条件。
名称 | 说明 | 示例 |
After | 请求发生在某个时间之后 | - After=2021-02-23T14:20:00.000+08:00[Asia/Shanghai] |
Before | 请求发生在某个时间之前 | -Before=2021-02-23T14:20:00.000+08:00[Asia/Shanghai] |
Between | 请求发生在两个时间之间 | -Between=2017-01-20T17:42:47.789-07:00[Asia/Shanghai], 2017-01-21T17:42:47.789-07:00[Asia/Shanghai] |
Cookie | cookie名和值 | -Cookie= |
Header | 请求头 | - Header=X-Request-Id, \d+ |
Host | 请求主机 | - Host=**.,**. |
Method | 请求方法 | - Method=GET,POST |
RemoteAddr | 远程地址 | - RemoteAddr=192.168.1.1/24 |
Weight | 权重 | - Weight=group1, 2 |
GatewayFilter Factories过滤器工厂配置
路由过滤器能够控制请求和响应。
名称 | 说明 | 样例 |
AddRequestHeader | 请求头 |
跨域配置、跨域资源共享、CORS Configuration
前后端分离,会存在跨域问题。
跨域问题产生的原因:浏览器为了保证用户信息安全,使用了“同源策略”这种方式。
什么是同源:两个请求需要同时满足:协议相同、域名相同、端口号相同。
以http://www.example.com/dir/page.html这个网址为例,协议是http://,域名是www.example.com,端口是80(默认端口可以省略):
http://www.example.com/dir2/other.html:同源 http://example.com/dir/other.html:不同源(域名不同) http:///dir/other.html:不同源(域名不同)
http://www.example.com:81/dir/other.html:不同源(端口不同)
跨域资源共享CORS:允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
后端应用服务配置了CORS,就能实现跨域资源共享,具体配置如下:
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "https://docs.spring.io"
allowedMethods:
- GET
















