目录

网关能干什么

网关的技术实现

搭建网关服务

网关作用流程图

路由断言工厂(Route Predicate Factory)

gateway中有三种过滤器:

1. 默认过滤器(DefaultFiter)

2. 路由过滤器(GatewayFilter)

3. 全局过滤器(GlobalFilter)

当有多个全局过滤器时,如何决定过滤器的执行顺序呢?

三种过滤器执行的顺序

网关解决跨域问题


网关能干什么

  • 身份认证和权限校验
  • 服务路由、负载均衡
  • 请求限流

网关的技术实现

在SpringCloud中网关的实现包括两种:

  1. gateway
  2. zuul

Zuul是基于Servlet的实现,属于阻塞式编程。

SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,性能更好。

搭建网关服务

1. gateway pom文件

<!--        gateway 网关 pom--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

2. 配置yml

server :port: 10010 #gate网关端口(统一访问端口)
spring :application:name: gateway #网关服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: #网关路由配置- id: cloud-client       #路由id,自定义,只要唯- -即可uri: lb://cloud-client #路由的目标地址Lb就是负载均衡,后面跟服务名称predicates:            #路由断言,也就是判断请求是否符合路由规则的条件- Path=/hello/**     #这个是按照路径匹配,只要以/user/ 开头就符合要求

网关作用流程图

路由断言工厂(Route Predicate Factory)

我们在yml配置文件中写的断言规则只是字符串 ,这些字符串会被Predicate Factory读取并处理,转变为路由判断的PathRoutePredicateFactory类

例如Path=/user/**是按照路径匹配, 这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的
像这样的断言工厂在SpringCloudGateway还有十几个,

例如:


gateway中有三种过滤器:

  1. 默认过滤器
  2. 路由过滤器
  3. 全局过滤器

1. 默认过滤器(DefaultFiter)

对全部路由进行拦截

默认过滤器配置

server :port: 10010 #gate网关端口(统一访问端口)
spring :application:name: gateway #网关服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: #网关路由配置- id: cloud-client       #路由id,自定义,只要唯- -即可uri: lb://cloud-client #路由的目标地址Lb就是负载均衡,后面跟服务名称predicates:            #路由断言,也就是判断请求是否符合路由规则的条件- Path=/hello/**     #这个是按照路径匹配,只要以/user/ 开头就符合要求default-filters:- AddRequestHeader = Truth,this is demo #默认过滤器的配置

2. 路由过滤器(GatewayFilter)

只对指定路由进行拦截

路由过滤器配置

server :port: 10010 #gate网关端口(统一访问端口)
spring :application:name: gateway #网关服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: #网关路由配置- id: cloud-client       #路由id,自定义,只要唯- -即可uri: lb://cloud-client #路由的目标地址Lb就是负载均衡,后面跟服务名称predicates:            #路由断言,也就是判断请求是否符合路由规则的条件- Path=/hello/**     #这个是按照路径匹配,只要以/user/ 开头就符合要求filters:- AddRequestHeader = Truth,this is demo #路由过滤器的配置
  • filters:是配置路由过滤器的过滤器
  • AddRequestHeader:是 Spring提供写好的的路由过滤器工厂

3. 全局过滤器(GlobalFilter)

自定义逻辑的全部路由进行拦截

全局过滤器实现

1. 实现 GlobalFilter 接口

/*** @param  exchange:请求上下文,可以获得 Request,Response 等信息*          chain: 请求传递给下一个过滤器* @return $返回表示当前过滤器业务结束*/
@Order()
@Component
public class fiter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//获得请求参数MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();//获取参数中的authorization参数String auth = params.getFirst("authorization");//进行判断if("admin".equals(auth)){//正确,放行return chain.filter(exchange);}//错误,结束,返回错误码exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}
}

当有多个全局过滤器时,如何决定过滤器的执行顺序呢?

方法一:@Order()注解:当有多个全局过滤器时,决定过滤器的执行顺序,数字越小越先执行

方法二:实现 Ordered 接口,重写返回值

    @Overridepublic int getOrder() {return 0;}

三种过滤器执行的顺序

全局路由器通过适配器模式将默认过滤器和路由过滤器统一为GatewayFilter

  • 每一个过滤器都必须指定一个int类型的order值, order值越小,执行优先级越高。
  • GlobalFilter通过实现Ordered接口, 或者添加@Order注解来指定order值,由我们自己指定
  • 路由过滤器和defaultFilter的order由Spring指定, 默认是按照声明顺序从1递增
  • 当过滤器的order值一样时,会按照defaultFilter >路由过滤器> GlobalFilter的顺序执行

网关解决跨域问题

跨域问题:浏览器(前端)禁止请求的发起者与服务器(后端)发送跨域ajax请求,不接收服务器的响应,请求被拦截器拦截的问题

什么是ajax请求:简单来说就是,局部更新前端页面

spring:cloud:gateway:# 开启网关的跨域功能,具体微服务上的跨域需要进行关闭,否则无效globalcors:add-to-simple-url-handler-mapping: true     #解决options 请求被拦截问题corsConfigurations:'[/**]':                  # 匹配所有请求allowedOrigins: "*"     # 跨域处理 允许所有的域(前端的值)allowedMethods:         # 支持的方法- GET- POST- PUT- DELETEallowedHeaders: "*"        #允许在请求中携带的头信息allowCredentials: true     #是否允许携带cookiemaxAge: 360000             #这次跨域检测的有效期

配置Copy

【Gateway】统一网关Gateway学习记录相关推荐

  1. day02 Nacos集群配置、Feign远程调用和统一网关Gateway

    1.Nacos配置管理 Nacos除了可以做注册中心,同样可以做配置管理来使用. 统一配置管理 当微服务部署的实例越来越多,达到数十.数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错.我们需要一 ...

  2. 【微服务技术09】统一网关Gateway

    [微服务技术09]统一网关Gateway 案例代码:https://gitee.com/pikachu2333/spring-cloud-hexuan 1.网关作用 网关功能: 身份认证和权限校验 服 ...

  3. 【微服务】—— 统一网关Gateway

    文章目录 1. 概述 1.1 为什么需要网关 1.2 SpringCloud Gateway 2. gateway快速入门 搭建网关服务 1.创建新的module,引入SpringCloudGatew ...

  4. 「微服务系列」统一网关Gateway

    为什么需要网关 网关功能: 身份认证和权限校验 服务路由.负载均衡 请求限流 在SpringCloud中网关的实现包括两种: Zuul:基于Servlet的实现,属于阻塞式编程. SpringClou ...

  5. SpringCloud:统一网关Gateway

    目录 1.网关介绍 2.搭建网关服务 3.路由断言工厂 4.路由过滤器 5.全局过滤器GlobalFilter 6.过滤器执行顺序 7.跨域问题处理 1.网关介绍 网关(Gateway)又称网间连接器 ...

  6. 统一网关GateWay简介

    文章目录 1 GateWay简介 2 搭建网关服务 2.1 创建新的module,引入依赖 2.2 编写路由配置及nacos地址 3 路由断言工厂 4 路由过滤器GatewayFilter 5 过滤器 ...

  7. SpringCloud系列(七)最详细最全面详述统一网关 Gateway

     有道词典上对 Gateway 有大门口, 门道, 通道以及计算机术语中的网关之意, 其实对于网关这个概念是很好理解的, 例如有这样高档的小区车库, 当开车经过闸口的时候会识别你的车牌号, 识别成功后 ...

  8. 统一网关 Gateway

    网关的作用 对用户请求做身份认证.权限校验 将用户请求路由到微服务,并实现负载均衡 对用户请求做限流 1.搭建网关服务 (1).创建moudle,添加依赖 <!--网关依赖--> < ...

  9. 统一网关Gateway快速入门

    1.为什么需要网关 为了不让任何人都能访问我们的微服务,对用户的身份进行一个验证,如果是内部人员才允许访问,如果不是就拦截禁止访问.一切请求都得通过网关在进入到微服务中. 2.搭建网关服务 2.1 创 ...

最新文章

  1. 20145129 课程总结
  2. mysql.sock的作用
  3. 成功解决ModuleNotFoundError: No module named 'keras_retinanet'
  4. python怎么处理异常然后继续_Python异常处理-返回行,继续
  5. 车险赔付率分析报告_车险综合改革出台:下调附加费用率,三者限额提至千万...
  6. topsis综合评价法_DRG如何评价临床医师绩效——以肿瘤科为例
  7. 大数据之_数据采集Flume_Flume了解_学习内容介绍---Flume工作笔记002
  8. UHDTV(超高清电视) 的帧率规格:120fps
  9. 安装VS2017报错:程序包清单签名验证失败
  10. ubuntu下安装搜狗输入法
  11. 虚拟机下搭建一个dns服务器,虚拟机下DNS服务器配置.doc
  12. 手机电视应走免费之路
  13. 小米平板2,Windows10与Android互刷教程,小米平板2 线刷教程
  14. python——报数游戏
  15. 2012考研数学二第(4)题——定积分比较大小
  16. cordon、drain、delete node区别
  17. 一元三次方程求根公式的解法
  18. 智能编曲软件中文版-Band in a Box 2019 + RealBand PC
  19. excel函数采集,截取特殊符号前面/后面数据
  20. 产品经理应该做什么,产品经理要具备哪些能力

热门文章

  1. 机器学习-Kmeans
  2. Web字体(【iconfont.cn】引用在线字体)@font-face属性的使用以及字体格式详解
  3. YOLO内卷时代如何选择模型?
  4. mysql双机灾备_MySQL全方位灾备保护 Ⅱ 逻辑备份
  5. restore archivelog 常用用法
  6. html虾米音乐,最新虾米音乐API接口(附使用说明)
  7. matlab gui电机,基于MATLAB GUI的感应电机性能分析界面设计.docx
  8. Kafka 核心源码解读【三】--Controller模块
  9. 论文阅读 CVPR2022:End-to-End Semi-Supervised Learning for Video Action Detection
  10. 网络基础-路由篇-OSPF 单区域