【Gateway】统一网关Gateway学习记录
目录
网关能干什么
网关的技术实现
搭建网关服务
网关作用流程图
路由断言工厂(Route Predicate Factory)
gateway中有三种过滤器:
1. 默认过滤器(DefaultFiter)
2. 路由过滤器(GatewayFilter)
3. 全局过滤器(GlobalFilter)
当有多个全局过滤器时,如何决定过滤器的执行顺序呢?
三种过滤器执行的顺序
网关解决跨域问题
网关能干什么
- 身份认证和权限校验
- 服务路由、负载均衡
- 请求限流
网关的技术实现
在SpringCloud中网关的实现包括两种:
- gateway
- 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. 默认过滤器(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学习记录相关推荐
- day02 Nacos集群配置、Feign远程调用和统一网关Gateway
1.Nacos配置管理 Nacos除了可以做注册中心,同样可以做配置管理来使用. 统一配置管理 当微服务部署的实例越来越多,达到数十.数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错.我们需要一 ...
- 【微服务技术09】统一网关Gateway
[微服务技术09]统一网关Gateway 案例代码:https://gitee.com/pikachu2333/spring-cloud-hexuan 1.网关作用 网关功能: 身份认证和权限校验 服 ...
- 【微服务】—— 统一网关Gateway
文章目录 1. 概述 1.1 为什么需要网关 1.2 SpringCloud Gateway 2. gateway快速入门 搭建网关服务 1.创建新的module,引入SpringCloudGatew ...
- 「微服务系列」统一网关Gateway
为什么需要网关 网关功能: 身份认证和权限校验 服务路由.负载均衡 请求限流 在SpringCloud中网关的实现包括两种: Zuul:基于Servlet的实现,属于阻塞式编程. SpringClou ...
- SpringCloud:统一网关Gateway
目录 1.网关介绍 2.搭建网关服务 3.路由断言工厂 4.路由过滤器 5.全局过滤器GlobalFilter 6.过滤器执行顺序 7.跨域问题处理 1.网关介绍 网关(Gateway)又称网间连接器 ...
- 统一网关GateWay简介
文章目录 1 GateWay简介 2 搭建网关服务 2.1 创建新的module,引入依赖 2.2 编写路由配置及nacos地址 3 路由断言工厂 4 路由过滤器GatewayFilter 5 过滤器 ...
- SpringCloud系列(七)最详细最全面详述统一网关 Gateway
有道词典上对 Gateway 有大门口, 门道, 通道以及计算机术语中的网关之意, 其实对于网关这个概念是很好理解的, 例如有这样高档的小区车库, 当开车经过闸口的时候会识别你的车牌号, 识别成功后 ...
- 统一网关 Gateway
网关的作用 对用户请求做身份认证.权限校验 将用户请求路由到微服务,并实现负载均衡 对用户请求做限流 1.搭建网关服务 (1).创建moudle,添加依赖 <!--网关依赖--> < ...
- 统一网关Gateway快速入门
1.为什么需要网关 为了不让任何人都能访问我们的微服务,对用户的身份进行一个验证,如果是内部人员才允许访问,如果不是就拦截禁止访问.一切请求都得通过网关在进入到微服务中. 2.搭建网关服务 2.1 创 ...
最新文章
- 20145129 课程总结
- mysql.sock的作用
- 成功解决ModuleNotFoundError: No module named 'keras_retinanet'
- python怎么处理异常然后继续_Python异常处理-返回行,继续
- 车险赔付率分析报告_车险综合改革出台:下调附加费用率,三者限额提至千万...
- topsis综合评价法_DRG如何评价临床医师绩效——以肿瘤科为例
- 大数据之_数据采集Flume_Flume了解_学习内容介绍---Flume工作笔记002
- UHDTV(超高清电视) 的帧率规格:120fps
- 安装VS2017报错:程序包清单签名验证失败
- ubuntu下安装搜狗输入法
- 虚拟机下搭建一个dns服务器,虚拟机下DNS服务器配置.doc
- 手机电视应走免费之路
- 小米平板2,Windows10与Android互刷教程,小米平板2 线刷教程
- python——报数游戏
- 2012考研数学二第(4)题——定积分比较大小
- cordon、drain、delete node区别
- 一元三次方程求根公式的解法
- 智能编曲软件中文版-Band in a Box 2019 + RealBand PC
- excel函数采集,截取特殊符号前面/后面数据
- 产品经理应该做什么,产品经理要具备哪些能力
热门文章
- 机器学习-Kmeans
- Web字体(【iconfont.cn】引用在线字体)@font-face属性的使用以及字体格式详解
- YOLO内卷时代如何选择模型?
- mysql双机灾备_MySQL全方位灾备保护 Ⅱ 逻辑备份
- restore archivelog 常用用法
- html虾米音乐,最新虾米音乐API接口(附使用说明)
- matlab gui电机,基于MATLAB GUI的感应电机性能分析界面设计.docx
- Kafka 核心源码解读【三】--Controller模块
- 论文阅读 CVPR2022:End-to-End Semi-Supervised Learning for Video Action Detection
- 网络基础-路由篇-OSPF 单区域