当前位置: 首页 > news >正文

两天学会微服务网关Gateway-Gateway过滤器

锋哥原创的微服务网关Gateway视频教程:

Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3_Gateway HelloWorld快速入门等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1oX4y1u7ZJ/Gateway分为Pre类型的过滤器和Post类型的过滤器。

  • Pre类型的过滤器在请求转发到后端微服务之前执行,在Pre类型过滤器链中可以做鉴权、限流等操作。

  • Post类型的过滤器在请求执行完成之后、将结果返回给客户端之前执行。

在Spring Cloud Gateway中内置了很多Filter,Filter有两种实现,分别是GatewayFilter和GlobalFilter。GlobalFilter全局过滤器会应用到所有的路由上,而GatewayFilter只会应用到单个路由或者一个分组的路由上。

5.1 Gateway过滤器工厂介绍

过滤器 有 20 多个 实现 类, 包括 头部 过滤器、 路径 类 过滤器、 Hystrix 过滤器 和 变更 请求 URL 的 过滤器, 还有 参数 和 状态 码 等 其他 类型 的 过滤器。

内置的过滤器工厂有22个实现类,包括 头部过滤器、路径过滤器、Hystrix 过滤器 、请求URL 变更过滤器,还有参数和状态码等其他类型的过滤器。根据过滤器工厂的用途来划分,可以分为以下几种:Header、Parameter、Path、Body、Status、Session、Redirect、Retry、RateLimiter和Hystrix

5.2 AddRequestParameter GatewayFilter Factory

spring:application:name: gateway-servercloud:gateway:routes:- id: add_request_parameter_routeuri: http://localhost:8080/predicates:- Path=/product/**filters:- AddRequestParameter=info, hehe

添加请求参数(属于前置过滤网关)

5.3 RewritePath GatewayFilter Factory

spring:application:name: gateway-servercloud:gateway:routes:- id: add_request_parameter_routeuri: http://localhost:8080/predicates:- Path=/product/**, /api-gateway/**filters:- AddRequestParameter=info, hehe- RewritePath=/api-gateway(?<segment>/?.*), $\{segment}

将/api-gateway/product/请求重写成/product/请求(属于前置过滤网关)

5.4 SetStatus GatewayFilter Factory

spring:application:name: gateway-servercloud:gateway:routes:- id: add_request_parameter_routeuri: http://localhost:8080/predicates:- Path=/product/**, /api-gateway/**filters:- AddRequestParameter=info, hehe- RewritePath=/api-gateway(?<segment>/?.*), $\{segment}- SetStatus=456

无论哪种情况,响应的HTTP状态都设置为456(属于后置过滤网关)

5.5 AddResponseHeader GatewayFilter Factory

spring:application:name: gateway-servercloud:gateway:routes:- id: add_request_parameter_routeuri: http://localhost:8080/predicates:- Path=/product/**, /api-gateway/**filters:- AddRequestParameter=info, hehe- RewritePath=/api-gateway(?<segment>/?.*), $\{segment}- SetStatus=456- AddResponseHeader=X-Response-Author, java1234

返回信息,添加header头信息(属于后置过滤网关)

5.6 gateway全局过滤器 GlobalFilter

全局过滤器不需要在配置文件中配置,作用在所有的路由上。我们可以用它来实现很多统一化处理的业务需求,比如负载均衡,统一过滤,路径转发,监控,日志等等。

全局过滤器加上网关过滤器组成过滤器链,该过滤器链的执行顺序是根据@Order注解指定的数字大小,从小到大进行排序,数字越小,优先级越高。

5.7 自定义过滤器

Spring Cloud Gateway提供了过滤器的扩展功能,开发者可以根据实际业务需求来自定义GatewayFilter网关过滤器或者GlobalFilter全局过滤器。

5.7.1 自定义GatewayFilter

实现GatewayFilter,Ordered接口,以及配置类

package com.java1234.filter;import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*** 自定义网关过滤器* @author java1234_小锋* @site www.java1234.com* @company Java知识分享网* @create 2021-04-08 16:25*/
public class MyCustomerGatewayFilter implements GatewayFilter,Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("自定义网关过滤器");return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;}
}

5.7.2 自定义GlobalFilter

实现GlobalFilter ,Ordered 接口,加上@Component注解即可;

package com.java1234.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*** @author java1234_小锋* @site www.java1234.com* @company Java知识分享网* @create 2021-04-09 12:29*/
@Component
public class MyCustomerGlobalFilter implements GlobalFilter ,Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("自定义全局过滤器");return chain.filter(exchange);}@Overridepublic int getOrder() {return -2;}
}

http://www.lryc.cn/news/311893.html

相关文章:

  • 图像处理 mask掩膜
  • 信驰达ESP32-C3/RTL8720CM WiFi开发板RF-WT01上线
  • 【产品经理方法论——产品的基本概念】
  • 推特API(Twitter API)V2 查询用户信息
  • 在Elasticsearch IK分词器中更新、停用某些专有名词
  • 时钟显示 html JavaScript
  • List<Object>集合对象属性拷贝工具类
  • 请说明Vue中的异步组件加载
  • 目标检测5:采用yolov8, RK3568上推理实时视频流
  • 微服务:Feign篇
  • 基于chatgpt的聊天机器人
  • BAT常见的20道Android面试题详解,我的头条面试经历分享
  • python66-Python的循环之常用工具函数
  • Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)
  • MATLAB报错:尝试将 SCRIPT imread 作为函数执行
  • 能源管理师:薪资待遇、技能知识与职业发展路景全解析
  • opencart3 添加速卖通商品脚本
  • 【Linux】USB Functionfs编程:libusb接口详解
  • 网络编程,IO多路复用
  • 【ue5】滑铲系统蓝图笔记
  • linux系统Jenkins工具参数化构建
  • 生活里的英语应该【怎么说】
  • Centos安装Jenkins
  • 软考中级系统集成必备100题(71-80)真题精炼
  • visual studio的使用
  • 对于爬虫的学习
  • 【学习笔记】开源计算机视觉库OPENCV学习方案
  • LVS负载均衡集群基础概念
  • pwn学习笔记(5)--格式化字符串漏洞(未完全完成)
  • HTML标签之表单标签,web开发实例教程