gateway介绍 #

gateway相当于所有服务的门户,将客户端请求与服务端应用相分离,客户端请求通过gateway后由定义的路由和断言进行转发,路由代表需要转发请求的地址,断言相当于请求这些地址时所满足的条件,只有同时符合路由和断言才给予转发。

一、鉴权 #

我们在gateway服务定义了一组过滤器其图如下:

img

在所有的客户端请求在经过gateway时,都会被拦截下来,并进行统一的权限判断处理,校验权限信息,如果不通过会返回指定结果,当然也可以在代码中定义指定的路径不受权限的控制。

3、附加知识

1)、执行顺序与性能

执行顺序过滤器>>拦截器>>aop ,拦截器与aop类似,都是基于反射机制而过滤器是基于函数回调,依赖selevet容器。拦截规则越来越细致,执行顺序依次是过滤器、拦截器、切面。一般情况下数据被过滤的时机越早对服务的性能影响越小,因此我们在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是aop。比如权限校验,一般情况下,所有的请求都需要做登陆校验,此时就应该使用过滤器在最顶层做校验

2)、拦截器与过滤器的区别

–过滤器基于函数回调,拦截器是基于java的反射

–过滤器可以拦截所有请求(包括静态资源的请求),拦截器只能拦截action请求(不包含静态资源)

–拦截器在action的生命周期内是可以多次调用,而过滤器只在容器初始化时被调用一次。

–过滤器是包裹在拦截器之外

–拦截器可以访问action的上下文,值栈里面的对象,而过滤器不行

3)、过滤器与拦截器用途

– 过滤器用于比如设置字符编码,鉴权操作等

–拦截器颗粒比过滤器要细可用于日志输出、请求参数安全验证等

二、路由 #

概述:

gateway根据路由与断言去转发请求到指定的服务,gateway服务中的配置文件中配置

spring:
  cloud:
    gateway:
      routes:
        # erp基础系统
        - id: mall3s-webapi-system
          uri: lb://mall3s-webapi-system
          predicates:
            - Path=/system/api/**
          filters:
            - StripPrefix=1
        - id: mall3s-settingscenter
          uri: lb://mall3s-settingscenter
          predicates:
            - Path=/settings/api/**
          filters:
            - StripPrefix=1
        - id: mall3s-webapi-skums
          uri: lb://mall3s-webapi-skums
          predicates:
            - Path=/skums/api/**
          filters:
            - StripPrefix=1    
        - id: mall3s-lms-test
          uri: lb://mall3s-lms-test
          predicates:
            - Path=/lms/api/**
          filters:
            - StripPrefix=1  
        - id: mall3s-wms-test
          uri: lb://mall3s-wms-test
          predicates:
            - Path=/wms/api/**
          filters:
            - StripPrefix=1  
      httpclient:
        connect-timeout: 30000
        response-timeout: 30s
gateway: #白名单
  white: /lms/api/system/SysConfig,/lms/api/File/Download,/system/api/system/SysConfig,/system/api/File/Download,/system/api/oauth/LoginByDingCode,/*/oauth/Login,/*/oauth/RSA/publicKey,/*/api/system/Message/websocket,/*/api/visualdev/DataScreen/**,/*/api/system/Base/DataMap/**,/*/api/visualdev/Generater/DownloadVisCode,/*/api/tenant,/*/api/tenant/**,/api/file/**,/*/v2/api-docs,/*/*/v2/api-docs,/csrf,/system/api/system/DataInterface/**

三、灰度发布、限流 #

上次更新: 3/10/2023, 5:33:48 PM