最全的Gateway统一网关快速入门
•网关的作用•gateway快速入门•断言工厂•过滤器工厂•全局过滤器•跨域问题
一:网关的作用 ?
网关功能:
1.身份认证和权限校验
2.服务路由、负载均衡
网关的技术实现 :
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/**
网关搭建步骤:
路由配置包括:
三:路由断言工厂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,后面为值。
对所有路由都生效的过滤器,并且可以自定义处理逻辑
五:全局过滤器 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.每一个过滤器都必须指定一个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.com2.域名相同,端口不同: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.是否允许使用cookie5.有效期是多久
最全的Gateway统一网关快速入门相关推荐
- Gateway网关-快速入门
gateway快速入门 下面,我们就演示下网关的基本路由功能.基本步骤如下: 创建SpringBoot工程gateway,引入网关依赖 编写启动类 编写基础配置和路由规则 启动网关服务进行测试 1)创 ...
- 2021年最新最全Flink系列教程_Flink快速入门(概述,安装部署)(一)(JianYi收藏)
文章目录 引言 相关教程直通车: day01_Flink概述.安装部署和入门案例 今日目标 Flink概述 什么是批处理和流处理 为什么需要流计算 Flink的发展史 Flink的官方介绍 Flink ...
- Kong 网关 快速入门
Kong api网关基础知识 一般业务场景 api网关的优缺点 Kong介绍 概念和特性 安装 Docker下安装 linux 下安装kong 安装问题 无DB模式 deck工具 通过Kong的res ...
- 【微服务】Gateway统一网关
- 网关是什么,一文带你快速入门腾讯技术工程
今天来开门见山地讲讲网关是一个怎么样的组件,网关在做什么事情.网关这个词其实到处都在用,它可以工作在硬件层面,也可以工作在网络层,还可以工作在应用层. 网关快速入门 网关在做什么? 我们今天讲的实际上 ...
- SpringCloud——Gateway(介绍、快速入门、网关集群)
介绍 网关是微服务最边缘的服务,直接暴露给用户,用来做用户和微服务的桥梁. Gateway是Spring官方提供的用来代替zuul的网关组件 核心逻辑:路由转发 + 执行过滤器链 三大核心概念 Rou ...
- Spring Cloud Alibaba 快速入门(七):Gateway微服务网关
前言:在微服务架构中,有一个组件可以说是必不可少的,那就是微服务网关.微服务网关处理了路由转发,负载均衡,缓存,权限校验,监控,限流控制,日志等.Spring Cloud Gateway是Spring ...
- 【微服务】—— 统一网关Gateway
文章目录 1. 概述 1.1 为什么需要网关 1.2 SpringCloud Gateway 2. gateway快速入门 搭建网关服务 1.创建新的module,引入SpringCloudGatew ...
- 「微服务系列」统一网关Gateway
为什么需要网关 网关功能: 身份认证和权限校验 服务路由.负载均衡 请求限流 在SpringCloud中网关的实现包括两种: Zuul:基于Servlet的实现,属于阻塞式编程. SpringClou ...
- 零基础编程入门python视频-Python编程零基础小白快速入门完整全系列精品课
1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...
最新文章
- 通过例子10分钟快速看懂pad_sequence、pack_padded_sequence以及pad_packed_sequence
- JQuery 中有用的方法
- 启明云端分享| SSD201 / SSD202D 在IP广播的应用
- SpringMVC异常处理机制-异常处理的思路
- 一个ABAP程序,能够下载指定的note到本地
- mysql获取各种日期
- 重构职场竞争力之测试跨界思维
- 【jmx】JMX最佳实践与详解
- C# ?? 操作符示例
- PHP的 Warning: Cannot modify header information - headers already sent by警告
- 潜意识的力量:潜意识开发四大关键
- 软件测试流程(完整版)
- Java_写出java MyJava abc cde efg 运行的结果(向main()方法中传参)
- VBA多工作簿中多工作表分类汇总
- 图说: 量子物理学的主要内容
- Centos下查看和修改网卡Mac地址
- 使用SQLyog导入EXCEL数据和合并数据表
- 云漫圈 | 什么是DNS?什么是DNS污染?什么又是DNS劫持?
- 一个屌丝程序猿的人生(四十六)
- 全国计算机等级考试二级公共基础知识考试大纲(2022年版)