•网关的作用
•gateway快速入门
•断言工厂
•过滤器工厂
•全局过滤器
•跨域问题

一:网关的作用 ?

网关功能:

1.身份认证和权限校验

2.服务路由、负载均衡

3.请求限流

网关的技术实现 :

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

2.zuul:是基于Servlet的实现,属于阻塞式编程

二:gateway快速入门 

搭建网关服务的步骤:

1.创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖:因为Gateway也是一个服务,也需要注册到nacos中。也可以使用eureka中。

        <!-- nacos服务注册发现依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--网关getway依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

2.编写路由配置及nacos地址:

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service  # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice  # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates:  # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/**  # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**

网关搭建步骤:

1.创建项目,引入nacos服务发现和gateway依赖
2.配置application.yml,包括服务基本信息、nacos地址、路由

路由配置包括:

1.路由id:路由的唯一标示
2.路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
3.路由断言(predicates):判断路由的规则,
4.路由过滤器(filters):对请求或响应做处理

 三:路由断言工厂Route Predicate Factory

网关路由可以配置的内容包括:

1.路由id:路由唯一标示
2.uri:路由目的地,支持lb和http两种
3.predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地
4.filters:路由过滤器,处理请求或响应

路由断言工厂:

1.我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件
2.例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的
3.像这样的断言工厂在SpringCloudGateway还有十几个
Spring提供了11种基本的Predicate工厂,具体见springcloud官网。

1.PredicateFactory的作用是什么?

读取用户定义的断言条件,对请求做出判断。

2.lPath=/user/**是什么含义?

路径是以/user开头的就认为是符合的。

四:路由过滤器 GatewayFilter

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理。Spring提供了31种不同的路由过滤器工厂。例如:

实现方式:在gateway中修改application.yml文件,路由添加过滤器:

spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service  # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice  # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates:  # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/**  # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**filters: # 过滤器- AddRequestHeader=Truth, is very good! # 添加请求头.Truth相当妤key,后面为值。

如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:

spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service  # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice  # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates:  # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/**  # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**default-filters: # 默认过滤器,会对所有的路由请求都生效- AddRequestHeader=Truth, is very good! # 添加请求头。Truth相当妤key,后面为值。
1.全局过滤器的作用是什么?

对所有路由都生效的过滤器,并且可以自定义处理逻辑

2.实现全局过滤器的步骤?
①实现GlobalFilter接口
②添加@Order注解或实现Ordered接口
③编写处理逻辑

五:全局过滤器 GlobalFilter

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。

区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。

定义方式是实现GlobalFilter接口。

例如下面案例:需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

•参数中是否有authorization,
•authorization参数值是否为admin

如果同时满足则放行,否则拦截

@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();// 2.获取authorization参数String auth = params.getFirst("authorization");// 3.校验if ("admin".equals(auth)) {// 放行return chain.filter(exchange);}// 4.拦截// 4.1.禁止访问exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);// 4.2.结束处理return exchange.getResponse().setComplete();}
}
1.全局过滤器的作用是什么?

对所有路由都生效的过滤器,并且可以自定义处理逻辑,可以处理自己的逻辑

2.实现全局过滤器的步骤?
①实现GlobalFilter接口
②添加@Order注解或实现Ordered接口
③编写处理逻辑

过滤器执行顺序:

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

六:跨域问题

跨域:域名不一致就是跨域,主要包括:

1.域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com
2.域名相同,端口不同:localhost:8080和localhost8081

跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题

解决方案:CORS

spring:cloud:gateway:globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:'[/**]':allowedOrigins: # 允许哪些网站的跨域请求 - "http://localhost:8088"- "http://www.leyou.com"allowedMethods: # 允许的跨域ajax的请求方式- "GET"- "POST"- "DELETE"- "PUT"allowedHeaders: "*" # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期

CORS跨域要配置的参数包括哪几个?

1.允许哪些域名跨域
2.允许哪些请求头
3.允许哪些请求方式
4.是否允许使用cookie
5.有效期是多久

最全的Gateway统一网关快速入门相关推荐

  1. Gateway网关-快速入门

    gateway快速入门 下面,我们就演示下网关的基本路由功能.基本步骤如下: 创建SpringBoot工程gateway,引入网关依赖 编写启动类 编写基础配置和路由规则 启动网关服务进行测试 1)创 ...

  2. 2021年最新最全Flink系列教程_Flink快速入门(概述,安装部署)(一)(JianYi收藏)

    文章目录 引言 相关教程直通车: day01_Flink概述.安装部署和入门案例 今日目标 Flink概述 什么是批处理和流处理 为什么需要流计算 Flink的发展史 Flink的官方介绍 Flink ...

  3. Kong 网关 快速入门

    Kong api网关基础知识 一般业务场景 api网关的优缺点 Kong介绍 概念和特性 安装 Docker下安装 linux 下安装kong 安装问题 无DB模式 deck工具 通过Kong的res ...

  4. 【微服务】Gateway统一网关

  5. 网关是什么,一文带你快速入门腾讯技术工程

    今天来开门见山地讲讲网关是一个怎么样的组件,网关在做什么事情.网关这个词其实到处都在用,它可以工作在硬件层面,也可以工作在网络层,还可以工作在应用层. 网关快速入门 网关在做什么? 我们今天讲的实际上 ...

  6. SpringCloud——Gateway(介绍、快速入门、网关集群)

    介绍 网关是微服务最边缘的服务,直接暴露给用户,用来做用户和微服务的桥梁. Gateway是Spring官方提供的用来代替zuul的网关组件 核心逻辑:路由转发 + 执行过滤器链 三大核心概念 Rou ...

  7. Spring Cloud Alibaba 快速入门(七):Gateway微服务网关

    前言:在微服务架构中,有一个组件可以说是必不可少的,那就是微服务网关.微服务网关处理了路由转发,负载均衡,缓存,权限校验,监控,限流控制,日志等.Spring Cloud Gateway是Spring ...

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

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

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

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

  10. 零基础编程入门python视频-Python编程零基础小白快速入门完整全系列精品课

    1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...

最新文章

  1. 通过例子10分钟快速看懂pad_sequence、pack_padded_sequence以及pad_packed_sequence
  2. JQuery 中有用的方法
  3. 启明云端分享| SSD201 / SSD202D 在IP广播的应用
  4. SpringMVC异常处理机制-异常处理的思路
  5. 一个ABAP程序,能够下载指定的note到本地
  6. mysql获取各种日期
  7. 重构职场竞争力之测试跨界思维
  8. 【jmx】JMX最佳实践与详解
  9. C# ?? 操作符示例
  10. PHP的 Warning: Cannot modify header information - headers already sent by警告
  11. 潜意识的力量:潜意识开发四大关键
  12. 软件测试流程(完整版)
  13. Java_写出java MyJava abc cde efg 运行的结果(向main()方法中传参)
  14. VBA多工作簿中多工作表分类汇总
  15. 图说: 量子物理学的主要内容
  16. Centos下查看和修改网卡Mac地址
  17. 使用SQLyog导入EXCEL数据和合并数据表
  18. 云漫圈 | 什么是DNS?什么是DNS污染?什么又是DNS劫持?
  19. 一个屌丝程序猿的人生(四十六)
  20. 全国计算机等级考试二级公共基础知识考试大纲(2022年版)

热门文章

  1. sqlserver Month()函数取日期不足两位的加 0(转载)
  2. Python字符串内建函数
  3. C语言题目:新胖子公式 (10 分)
  4. java 证书错误_java – SSL证书错误:certificate_unknown
  5. ubuntu22.04 耳机没声音 [已解决]
  6. 重言式判定------参考了别人的代码。。
  7. Android实现序列化方式
  8. 学习新方法:帅到没朋友
  9. 人工智能02 机器进化
  10. c语言 猜字游戏,【c语言】       小游戏――猜字游戏