Gateway网关-全局过滤器

news2025/2/26 3:41:29

目录

一、全局过滤器 GlobalFilter

二、案例实现

2.1 创建AuthorizeFilter实现类 

2.2 重启服务测试

 三、总结

 3.1 全局过滤器的作用是什么?

 3.2 实现全局过滤器的步骤?


一、全局过滤器 GlobalFilter

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。
区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。
定义方式是实现GlobalFilter接口。

public interface GlobalFilter {
/**
* 处理当前请求,有必要的话通过{@link GatewayFilterChain}将请求交给下一个过滤器处理

*
* @param exchange 请求上下文,里面可以获取Request、Response等信息
* @param chain 用来把请求委托给下一个过滤器
* @return {@code Mono<Void>} 返回标示当前过滤器业务结束
*/
Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) ;

}

二、案例实现

需求(定义全局过滤器,拦截并判断用户身份):

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

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

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

2.1 创建AuthorizeFilter实现类 
// ogder(int) 顺序注解,用于实现过滤器谁先执行的顺序,数值越小优先级越高,负数为最高
@ogder(-1)
// Component 注入到Spring当中 最为一个bean
@Component
public class AuthorizeFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
     // 1.获取请求参数
    ServerHttpRequest request = exchange.getRequestO;MultiValueMap<String,String> params =             request.getQueryParams();
    // 2.获取参数中的 authorization 参数
    String auth = params,getFirst( key: "authorization");
    // 3断参数值是否等于 admin
    if ("admin".equals(auth)){
        // 4.是,放行
        return chain.filter(exchange);
    }
    // 5.否,拦截
    // 5.1.设置状态码
    exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
    // 5.2.拦截请求
    return exchange.getResponse(0.setComplete();
    }
}
2.2 重启服务测试

 不加参数不可访问,证明过滤器已生效

加上请求参数后可以访问 

 三、总结

 3.1 全局过滤器的作用是什么?
  • 对所有路由都生效的过滤器,并且可以自定义处理逻辑
 3.2 实现全局过滤器的步骤?
  • 实现GlobalFilter接口
  • 添加@Order注解或实现Ordered接口
  • 编写处理逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1324044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(2021|EMNLP,CLIP,CLIPScore,RefCLIPScore)CLIPScore:图像标题的无参考评估指标

CLIPScore: A Reference-free Evaluation Metric for Image Captioning 公z号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. CLIPScore 4. 标题评估基准 …

clangd:Couldn‘t build compiler instance

在使用vscode clangd 搭建RK3588 5.10版本linux内核代码开发环境时&#xff0c;使用bear生成 compile_commands.json时&#xff0c;clangd生成标签失败代码无法跳转&#xff0c;查看clangd日志&#xff0c;发现标签生成失败&#xff0c;失败原因&#xff1a;Couldnt build comp…

【Spring教程32】SSM框架整合实战:从零开始学习SSM整合之功能模块开发 单元测试示例代码 PostMan接口测试示例

目录 1 功能模块开发1.1 步骤1:创建数据库及表1.2 步骤2:编写模型类1.3 步骤3:编写Dao接口1.4 步骤4:编写Service接口和实现类1.5 步骤5:编写Contorller类 2.单元测试2.1 步骤1:新建测试类2.2 步骤2:注入Service类2.3 步骤3:编写测试方法 3 PostMan测试3.1 新增3.2 修改3.3 删除…

单播、多播、广播、组播、泛播、冲突域、广播域、VLAN概念汇总

1 引言 “多播”可以理解为一个人向多个人&#xff08;但不是在场的所有人&#xff09;说话&#xff0c;这样能够提高通话的效率。如果你要通知特定的某些人同一件事情&#xff0c;但是又不想让其他人知道&#xff0c;使用电话一个一个地通知就非常麻烦&#xff0c;而使用日常…

软件企业在什么情况下需要找第三方软件测试机构?如何收费?

近年来&#xff0c;随着软件行业的迅猛发展&#xff0c;软件企业对软件测试的需求也越来越大。为了保证软件的质量和稳定性&#xff0c;许多企业选择寻找第三方软件测试机构来进行软件测试。第三方软件测试机构是独立于软件开发企业的专业机构&#xff0c;主要从事软件测试和质…

5252D 5G基站测试仪

01 5252D 5G基站测试仪 产品综述&#xff1a; 5252D多通道综测仪打破了信号发生器进行信号发射、频谱分析仪进行观看频域波形的测试方案&#xff0c;将信号收发融为一体&#xff0c;推动无线通信测试进入全新时代。其独具的多通道收发一体、高性能、全方位测试能力及直观操作…

如何在小程序中添加字符

随着移动互联网的普及&#xff0c;微信小程序已经成为众多商家的首选。通过微信小程序&#xff0c;商家可以展示产品、服务和品牌形象。那么如何在微信小程序中添加视频内容呢&#xff1f;本文将详细介绍操作步骤。 首先&#xff0c;商家需要登录乔拓云平台&#xff0c;进入门店…

计算机操作系统学习笔记

一、什么是操作系统 1、概念 操作系统&#xff08;operating system&#xff0c;简称OS&#xff09;是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。 …

机器学习之逻辑回归,一文掌握逻辑回归算法知识文集

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

路由跳转传递参数注意事项,查询字符串传参,params传参需要注意的地方,菜单内容的二级内容 vue3

路由跳转和传参(vue3)_vue3路由传参-CSDN博客 注意&#xff1a; import {useRouter} from "vue-router"const routeruseRouter()1.查询字符串传参&#xff0c;传一个对象&#xff0c;对象里面可以写path字段 router.push({path:/item,query:{id:1}} ) 通过当前路由…

嵌入式中GPIO的工作原理-面试工作必会技能

GPIO工作方式 1、4种输入模式 输入浮空输入上拉输入下拉模拟输入 如下图为GPIO的基本结构&#xff0c;它主要由4部分组成&#xff0c;其中我们所看到的的最右边的I/O引脚&#xff0c;也就是芯片外接可看到的引脚&#xff0c;其它的部分都是GPIO内部的结构。 ①保护二极管 保护…

德人合科技 | 公司电脑文件加密系统

公司电脑文件加密系统是一种可以对电脑文件进行加密的保护机制。它使用驱动层透明加密技术&#xff0c;能够在用户无感知的情况下对文件进行加密&#xff0c;从源头上保障数据安全和使用安全。 PC端访问地址&#xff1a; www.drhchina.com 此类系统主要有以下几个特点和功能&a…

轻度听力损失的儿童需要早期干预吗?

一些宝宝在做听力筛查时总是不通过&#xff0c;进一步听力诊断发现宝宝有轻度的听力损失&#xff0c;刚知道这个消息时&#xff0c;家长可担心了&#xff0c;总想着宝宝是不是听不到啊&#xff1f;但是一段时间后&#xff0c;有些家长又会忽略宝宝的听力问题&#xff0c;因为部…

【Matlab算法】随机梯度下降法 (Stochastic Gradient Descent,SGD) (附MATLAB完整代码)

随机梯度下降法 前言正文代码实现可运行代码结果 前言 随机梯度下降法 (Stochastic Gradient Descent&#xff0c;SGD) 是一种梯度下降法的变种&#xff0c;用于优化损失函数并更新模型参数。与传统的梯度下降法不同&#xff0c;SGD每次只使用一个样本来计算梯度和更新参数&am…

Nginx主配置文件详解【笔记】

1 Nginx配置文件目录结构 最近使用Nginx做负载均衡&#xff0c;顺便整理Nginx配置文件笔记如下所述&#xff0c;本文主要梳理主配置文件各属性的作用。使用yum安装好Nginx后&#xff0c;可以在默认路径&#xff08;/etc/nginx&#xff09;看到如下配置文件。 /etc/nginx/ ├─…

layui 树组件tree 通过API获取数据

一、简单 var treedata[];tree.render({elem: #addLeftType,id: demoId,data: treedata,showCheckbox: true,oncheck: function(obj){console.log(obj.data); // 得到当前点击的节点数据console.log(obj.checked); // 节点是否被选中console.log(obj.elem); // 得到当前节点元素…

diffusers-Inpainting

原文链接&#xff1a;添加链接描述 白色mask区域仅使用生成出来的&#xff0c;非白色mask区域使用原始影像&#xff0c;但是图像有点不平滑 import PIL import numpy as np import torchfrom diffusers import AutoPipelineForInpainting from diffusers.utils i…

一文为您解决:Ozon服装尺码表怎么上?Ozon富文本图片怎么处理等产品优化问题

近日&#xff0c;不少Ozon卖家反馈在编辑产品时遇到&#xff1a;中俄服装/鞋类尺码不匹配、富文本文案及图片编辑较繁琐、详描图片质量不佳、富文本图片上传效率慢等问题。 针对以上问题&#xff0c;妙手ERP在Ozon采集箱及在线产品的产品编辑模块优化了以下功能&#xff0c;全…

了解C++工作机制

基于hello.cpp对C的运行进行一个初步认识&#xff0c;并介绍国外C大佬Cherno常用的项目结构和调试Tips C是如何工作的 C工作流程1.实用工程&#xff08;project&#xff09;结构&#xff08;1&#xff09;Microsoft Visual Studio2022新建项目后&#xff0c;自动生成的原始文件…

【机器学习】密度聚类:从底层手写实现DBSCAN

【机器学习】Building-DBSCAN-from-Scratch 概念代码数据导入实现DBSCAN使用样例及其可视化 补充资料 概念 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算…