gateway介绍 #
gateway相当于所有服务的门户,将客户端请求与服务端应用相分离,客户端请求通过gateway后由定义的路由和断言进行转发,路由代表需要转发请求的地址,断言相当于请求这些地址时所满足的条件,只有同时符合路由和断言才给予转发。
一、鉴权 #
我们在gateway服务定义了一组过滤器其图如下:
在所有的客户端请求在经过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/**