gateway

简介: gateway

网关功能:

 身份认证和权限校验 (你是谁、有什么权限,能不能访问)


 服务路由、负载均衡 (引导访问具体的微服务、负载平衡)


请求限流(允许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、头信息、以及跨域检测的有效期



目录
相关文章
|
数据库连接 数据库
kettle开发篇-流查询
kettle开发篇-流查询
621 0
|
监控 前端开发 安全
SpringCloud Gateway鉴权和跨域解决方案
SpringCloud Gateway鉴权和跨域解决方案
1948 0
|
9月前
|
消息中间件 NoSQL Unix
Redis的基本特性以及其基础命令用法
这只是冰山一角,Redis的强大功能和简洁的操作方法值得我们深入了解和掌握,是复杂数据问题解决的有力工具。所以,来一场有趣的Redis冒险吧!
239 6
|
关系型数据库 数据库 PostgreSQL
postgresql|数据库|启动数据库时报错:FATAL: could not map anonymous shared memory的解决
postgresql|数据库|启动数据库时报错:FATAL: could not map anonymous shared memory的解决
724 1
|
前端开发 Java API
Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版
本文提供了一份详细的Swagger接口文档生成工具的使用教程,包括了导入依赖、配置类设置、资源映射、拦截器配置、Swagger注解使用、生成接口文档、在线调试页面访问以及如何设置全局参数(如token),旨在帮助Java开发者快速上手Swagger。
10156 0
Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版
|
Java 网络架构 Spring
过滤器执行顺序
过滤器执行顺序
372 0
过滤器执行顺序
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
996 2
|
Go 开发者
golang的http客户端封装
golang的http客户端封装
500 0
|
SpringCloudAlibaba Java 开发者
SpringCloudAlibaba之Sentinel简单使用
高频率刷新,可以看到hello world、fallback、block handler都会出现。
351 0
|
JSON 安全 关系型数据库
SpringCloud Gateway 实现自定义全局过滤器 + JWT权限验证
SpringCloud Gateway 实现自定义全局过滤器 + JWT权限验证

热门文章

最新文章