SpringCloud学习笔记-gateway网关自定义全局过滤器

news/2024/7/24 5:06:37 标签: spring cloud, 过滤器, Gateway

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

  • 参数中是否有authorization,

  • authorization参数值是否为admin

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

实现:

在gateway中定义一个过滤器

package cn.itcast.gateway.filters;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {
    @Override
    public 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();
    }
}

3.5.3.过滤器执行顺序
请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter

请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器
在这里插入图片描述
排序的规则是什么呢?

  • 每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前
  • GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定
  • 路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增。
  • 过滤器的order值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter的顺序执行。

http://www.niftyadmin.cn/n/5101887.html

相关文章

工控机通过485modbus转profinet网关与温度智能表通讯配置案例

在这个案例中&#xff0c;通过485modbus转profinet网关&#xff08;XD-MDPN100&#xff09;可以实现工控机与温度智能表之间的双向通信。工控机通过modbus协议将温度数据发送到网关&#xff0c;网关将数据转换为profinet协议后发送给温度智能表进行显示和控制。 通过485modbus转…

HiveServer2负载均衡

有多个HiveServer2服务时&#xff0c;可以借助Zookeeper服务实现访问HiveServer2的负载均衡&#xff0c;将HiveServer2的压力分担到多个节点上去。本文详细介绍HiveServer2负载均衡的配置及使用方法&#xff0c;请根据EMR集群&#xff08;普通集群和Kerberos集群&#xff09;的…

CCF计算机资格认证模拟题202303-2垦田计划

问题描述 顿顿总共选中了 块区域准备开垦田地&#xff0c;由于各块区域大小不一&#xff0c;开垦所需时间也不尽相同。据估算&#xff0c;其中第 块&#xff08;&#xff09;区域的开垦耗时为 天。这 块区域可以同时开垦&#xff0c;所以总耗时 取决于耗时最长的区域&#xf…

Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践)

目录 一、axiox 1.1、axios 简介 1.2、axios 基本使用 1.2.1、下载核心 js 文件. 1.2.2、发送 GET 异步请求 1.2.3、发送 POST 异步请求 1.2.4、发送 GET、POST 请求最佳实践 1.3、请求响应拦截器 1.3.1、拦截器解释 1.3.2、请求拦截器的使用 1.3.3、响应拦截器的使…

【算法 | 位运算No.1】leetcode268. 丢失的数字

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【Leetcode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

2023年中国气体压缩机市场规模及产量分析[图]

气体压缩机是把机械能转换为气体压力能的一种动力装置&#xff0c;常用于风动工具提供气体动力&#xff0c;在石油化工、钻采、冶金等行业也常用于压送氧、氢、氨、天然气、焦炉煤气、惰性气体等介质。常见的气体压缩机包括离心式压缩机、螺杆式压缩机、往复式压缩机等。 气体…

python二次开发Solidworks:圆形弹簧

目录 1、手动建模 2、python自动建模 1、手动建模 第一步​&#xff1a;草图1&#xff0c;在上视基准面画一个圆心在原点&#xff0c;直径50mm的圆​&#xff1b; 第二步​&#xff1a;草图2&#xff0c;在上视基准面画两条构造线&#xff0c;一条经过原点方向竖直&#xff0…

HTML代码中引入CSS样式的三种方式

1.内联样式: 使用style属性将CSS样式直接嵌入到HTML元素中.例如 2.内部样式表 3.引入外部样式