spring cloud整合gateway网关

一. 什么是微服务网关?

微服务网关是位于服务之前或者应用程序之前的一个层面,用于保护、增强和控制微服务的访问。

其常见的作用有:

  1. 鉴权校验:验证是否认证和授权
  2. 统一入口:提供所有微服务的入口点,起到隔离作用,保障服务的安全性
  3. 限流熔断
  4. 路由转发
  5. 负载均衡
  6. 链路追踪

二. 微服务集成网关

1. 引入依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-gateway</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-webflux</artifactId>
  8. </dependency>
  9. <!--添加nacos客户端-->
  10. <dependency>
  11. <groupId>com.alibaba.cloud</groupId>
  12. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  13. </dependency>
  14. <!--配置中心-->
  15. <dependency>
  16. <groupId>com.alibaba.cloud</groupId>
  17. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  18. </dependency>

注意点

  1. 网关项目需要去除spring boot web的依赖,如果引入了 **spring-boot-starter-web**的依赖,项目启动会报错

2. bootstrap.yml配置

  • 由于加载顺序的原因,gateway项目需要在bootstrap.yml中加入nacos注册中心地址

    1. spring:
    2. application:
    3. name: micro-gateway
    4. cloud:
    5. nacos:
    6. discovery:
    7. server-addr: localhost:8848
    8. config:
    9. server-addr: localhost:8848 #Nacos配置中心地址
    10. file-extension: yaml #文件拓展格式
    11. profiles:
    12. active: dev
  • 配置中心application.yml配置
    ```yaml server: port: 9010

spring: application: name: micro-gateway cloud: gateway: discovery: locator: enabled: true lower-case-service-id: true #使用小写service-id routes:

  1. - id: micro-auth
  2. uri: lb://micro-auth
  3. predicates:
  4. - Path=/micro-auth/**
  5. filters:
  6. - StripPrefix=1
  7. - id: micro-upms
  8. uri: lb://micro-upms
  9. predicates:
  10. - Path=/micro-upms/**
  11. filters:
  12. - StripPrefix=1
  13. - id: micro-data
  14. uri: lb://micro-data
  15. predicates:
  16. - Path=/micro-data/**
  17. filters:
  18. - StripPrefix=1

security: oauth2: resourceserver: jwt: jwk-set-uri: ‘http://localhost:9010/micro-auth/rsa/publicKey‘ #配置RSA的公钥访问地址 redis: host: localhost port: 8203 password: admin

secure: ignore: urls: #配置白名单路径

  1. - "/doc.html"
  2. - "/swagger-resources/**"
  3. - "/swagger/**"
  4. - "/**/v2/api-docs"
  5. - "/**/*.js"
  6. - "/**/*.css"
  7. - "/**/*.png"
  8. - "/**/*.ico"
  9. - "/webjars/springfox-swagger-ui/**"
  10. - "/actuator/**"
  11. - "/micro-auth/oauth/token"
  12. - "/micro-auth/rsa/publicKey"
  13. - "/micro-auth/auth/**"
  14. - "/micro-upms/api/admin/**"

management: #开启SpringBoot Admin的监控 endpoints: web: exposure: include: ‘*’ endpoint: health: show-details: always

  1. <a name="77744975"></a>
  2. ## 三. spring gateway架构流程
  3. <a name="6c3828ef"></a>
  4. ### 1. 详解SpringCloud Gateway架构流程
  5. - 网关的配置项
  6. - 路由:路由是网关的基本单元,由ID、URLI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发

route组成部分 id:路由的ID uri:匹配路由的转发地址 predicates:配置该路由的断⾔,通过 PredicateDefinition类进⾏接收配置。 order:路由的优先级,数字越⼩,优先级越⾼。

  1. - 交互流程
  2. 1. 客户端向Spring Cloud Gateway发出请求
  3. 2. 如果⽹关处理程序映射确定请求与路由匹配
  4. 3. 则将其发送到⽹关Web处理程序
  5. 4. 通过特定过滤器链运⾏,前置处理-后置处理
  6. <br />![](https://gitee.com/BBQPlus/source-picture/raw/master/image-20210718111743075.png#id=BTDSU&originHeight=861&originWidth=722&originalType=binary&ratio=1&status=done&style=none)
  7. <a name="1b64e824"></a>
  8. ### 2. 微服务SpringCloud Gateway内置路由断言讲解
  9. - 什么是Gateway路由断言
  10. - Predicate 来源于Java8,接受输⼊参数,返回⼀个布尔值结果
  11. - Spring Cloud Gateway Spring 利⽤ Predicate 的特 性实现了各种路由匹配规则
  12. - 转发的判断条件,SpringCloud Gateway⽀持多种⽅ 式,常⻅如:PathQueryMethodHeader
  13. - ⽀持多个Predicate请求的转发是必须满⾜所有的 Predicate后才可以进⾏路由转发
  14. - 参数编写规则

predicates:

  • Host=
  • Path=
  • Method=
  • Header=
  • Query=
  • Cookie= ```

3. Spring Cloud Gateway 过滤器

  • 网关过滤器的生命周期
    • PRE:这种过滤器在请求被路由之前调用,一般用于鉴权、限流等
    • POST:这种过滤器在路由到微服务以后执行,一般用户修改相应结果,比如增加header信息、打点结果日志
  • 网关过滤器分类
    • 局部过滤器 GatewayFilter: 应用在某个路由上,每个过滤器工厂都对应一个实现类,并且这些类的名称必须以GatewayFilterFactory结尾
  • 内置局部过滤器,顶级接口,GatewayFilterFactory

第三章 spring cloud整合gateway网关 - 图1

  • 内置全局过滤器, 顶级接口 GlobalFilter

第三章 spring cloud整合gateway网关 - 图2

4. 全局过滤器实现用户鉴权,后续结合Spring oauth2进行讲解