Gateway网关-全局过滤器

目录

一、全局过滤器 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 {@Overridepublic 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断参数值是否等于 adminif ("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.hqwc.cn/news/288105.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 取经之路——第三题-无重复长度的最长子串

&#x1f389;&#x1f389;&#x1f389;今天给大家分享的是一道滑动窗口的OJ题。 3.无重复长度的最长子串 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; 动动…

【Linux】进程周边006之进程地址空间

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.程序地址空间 1.1验证地址…

干货 | 如何通过度量研发效能,多角度洞察百人敏捷团队的价值交付?

随着软件行业的快速发展&#xff0c;高效的研发效能已成为企业竞争力的关键因素。尤其对于具有一定人数规模的敏捷研发团队&#xff0c;如何在复杂的项目环境中客观衡量研发效能&#xff0c;更是团队和管理者面临的重要课题。这不仅关系到项目的质量、交付速度&#xff0c;更直…

Java的字节码操作框架ASM详解

文章目录 一、ASM介绍1. 简介2. 基本概念3. Java ASM的应用场景 二、ASM基本使用1. 基本使用2. Java ASM主要组件3. Java ASM使用组件准备4. 修改字节码 三、Java ASM高级技巧1. 自定义类加载器2. 动态代理 一、ASM介绍 1. 简介 ASM是一个用于在Java字节码级别进行操作的框架…

【Webapck学习】

1、webpack是什么 Webpack是一个前端模块化方案&#xff0c;更侧重于模块打包。我们可以把开发中的所有资源(图片&#xff0c;js,css,字体等) 都看成模块&#xff0c;通过loader和plugins对资源进行处理&#xff0c;打包成符合生产环境部署的前端资源 初始化项目&#xff0c;得…

操作系统之银行家算法

Dijkstra在1965年提出的银行家算法是著名的死锁避免算法&#xff0c;这个用于一个银行家给多个顾客贷款的算法可以直接用于操作系统给进程分配资源&#xff0c;这时只要把银行家换成操作系统&#xff0c;把顾客换成进程&#xff0c;把资金换成资源&#xff0c;把银行家决定是否…

Dbvis 链接Oracle数据库

安装 Dbvisualizer 后 1&#xff0c;打开Dbvisualizer&#xff0c;单机左键 图片标注处。 2&#xff0c;点击右键&#xff0c;显示。 3&#xff0c;点击Creat Datebase Connection 4,点击 use wizard &#xff0c;填写 地址&#xff0c;下一步 5&#xff0c;选择 Orcal Thin …

【SQL】根据年份,查询每个月的数据量

根据年份&#xff0c;查询每个月的数据量 一种 WITH Months AS (SELECT 1 AS Month UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION…

Ubuntu 常用命令之 netstat 命令用法介绍

netstat 是一个非常有用的命令行工具&#xff0c;它可以帮助我们监控和诊断网络问题。在 Ubuntu 系统中&#xff0c;我们可以使用 netstat 命令来查看网络连接、路由表、接口统计等信息。 netstat 命令的参数有很多&#xff0c;以下是一些常见的参数 -a&#xff1a;显示所有连…

Ubuntu 常用命令之 ifconfig 命令用法介绍

ifconfig 是一个用于配置和显示 Linux 内核中网络接口的系统管理命令。它用于配置&#xff0c;管理和查询 TCP/IP 网络接口参数。 ifconfig 命令的参数有很多&#xff0c;以下是一些常见的参数 up&#xff1a;激活指定的网络接口。down&#xff1a;关闭指定的网络接口。add&a…

外汇天眼:高雄男子投资1170万获利领不出,惊觉遭诈果断报警设局逮车手; SKYTOPTRADE遭FCA示警具投资风险

拜日益发达的网络科技所赐&#xff0c;现代人只要拥有一支智能手机&#xff0c;想要投资股票、期货、外汇、加密货币绝非难事。 然而&#xff0c;近年来假投资诈骗十分猖獗&#xff0c;造成许多民众相当严重的金钱损失&#xff0c;如今已经成为不可忽视的社会问题。 不久前&…

一篇文章教会你使用VSCode搭建Python开发环境

前言 Python是一门高级的通用编程语言&#xff0c;适用于广泛的领域和应用场景&#xff0c;主要应用领域如数据科学、Web开发、自动化测试、网络爬虫、游戏开发、人工智能、机器学习等。对于大多数普通人而言在日常开发中&#xff0c;我们应用最多的还是利用Python脚本来完成数…