网关功能:
身份认证和权限校验 (你是谁、有什么权限,能不能访问)
服务路由、负载均衡 (引导访问具体的微服务、负载平衡)
请求限流(允许10个用户,来了100个访问,不行,得限流)
Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
网关的作用
对用户请求做身份认证、权限校验
将用户请求路由到微服务,并实现负载均衡
对用户请求做限流
只要符合它的断言,它就带你去相应的服务
网关搭建步骤:
1.创建项目,引入nacos服务发现和geteway依赖
2.配置application.yml,包括服务基本信息、nacos地址、路由
路由配置包括:
1、路由id:路由的唯一表示
2、路由目标(url):路由的目标地址,http地址代表固定地址,lb代表根据服务名负载均衡
3、路由断言:判断路由的规则
4、路由过滤器:对请求或响应做处理
看你访问请求的地址是否符合断言规则,符合的话则转发到路由目的地,不符合的则拒绝访问。
断言工厂有很多种规则,比如限制地域+时间,韩国的2030年前的不能访问。
Gateway是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理
用户访问微服务需要经过路由和一层层的过滤器,同样微服务响应给用户的信息也需要通过层层过滤器和路由。
过滤器的作用是什么?
1)对路由的请求或响应做加工处理,比如添加请求头
2)配置在路由下的过滤器只对当前路由的请求生效
default-filtersde作用是什么?
对所有路由都生效的过滤器
全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用意义
区别在于GatewayFiter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现
定义方式是实现GlobalFilter接口
定义全局过滤器,拦截并判断用户身份
需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:
参数中是否有authorization
authorization参数值是否为admin
如果同时满足则放行,否则拦截
全局过滤器的作用是什么?
对所有路由都生效的过滤器,并且可以自定义处理逻辑
它本身的过滤器工厂里面的东西是写死的,而全局过滤器的逻辑是自己写的。
实现全局过滤器的步骤?
1.实现GlobalFilter接口
2.添加@Order注解或实现Ordered接口
3.编写处理逻辑
过滤器执行顺序
请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GolobalFiter
请求路由后,会将当前路由过滤器和DefaultFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器
每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前。
GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定
路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增。
路由过滤器、defaultFilter、全局过滤器的执行顺序?
1)order值越小,优先级越高
2)当order值一样时,顺序是defaultFilter最先,然后是局部的路由过滤器,最后是全局过滤器。
你有很多个过滤器,怎么确认顺序呢,就是根据order值的大小,越小越先。
跨域问题处理
跨域:域名不一致就是跨域,主要包括:
域名相同,端口不同:localhost:8080和localhost8081
跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题
解决方案:CORS
CORS跨域要配置的参数包括哪几个?
允许哪些域名跨域?
允许哪些请求头?
允许哪些请求方式?
是否允许使用cookie?
有效期是多久?
网关的作用是识别身份,给予有权限的用户访问
网关还有过滤器工厂,可以根据地域时间来拦截
全局过滤器,自定义逻辑,过滤器链,执行顺序由order值大小决定
网关还可以设置允许某些域名和访问方式,cookie、头信息、以及跨域检测的有效期