Spring Cloud Gateway入门

  1. Spring Cloud Gateway是什么?用来解决什么问题?

Spring Cloud Gateway是Spring生态中的一个项目,称为网关。作用是将用户请求路由(Route)到相应的API接口;

在微服务项目中,网关也是一个微服务,网关也需要单独新建一个项目。

通过网关能够实现:

  • 提供统一的请求入口;

  • 对请求进行身份认证;

  • 路由,最基本的功能;

  • 负载均衡;

  • 请求限流,限制流量请求;

  1. 网关工作原理

Spring Cloud Gateway入门_第1张图片
  1. 客户端向网关发起请求

  1. 网关处理映射确定请求与某个路由相匹配,将请求发送给网关web处理程序

  1. 过滤器链能够在请求之前和之后起到相应的作用

  1. 网关web处理程序,通过过滤器链后请求到相应的服务

  1. 如何引入Spring Cloud Gateway

注意:不支持以servlet为容器和WAR包部署的传统项目

POM文件中引入依赖spring-cloud-starter-gateway



    org.springframework.cloud
    spring-cloud-starter-gateway
    4.0.2

  1. 网关配置文件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: 
  1. 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=**.somehost.org,**.anotherhost.org

Method

请求方法

- Method=GET,POST

RemoteAddr

远程地址

- RemoteAddr=192.168.1.1/24

Weight

权重

- Weight=group1, 2

  1. GatewayFilter Factories过滤器工厂配置

路由过滤器能够控制请求和响应。

名称

说明

样例

AddRequestHeader

请求头

  1. 跨域配置、跨域资源共享、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://v2.www.example.com/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

你可能感兴趣的:(Spring,Cloud微服务,spring,cloud,微服务,gateway,spring)