Spring Cloud Gateway过滤器的执行顺序|世界热文
2023-04-12 09:34:05 来源:腾讯云

在Spring Cloud Gateway中,过滤器的执行顺序对于实现请求处理流程的正确性和效率至关重要。Spring Cloud Gateway中的过滤器分为全局过滤器和局部过滤器两种类型,不同类型的过滤器在执行顺序上有所不同。


(资料图片)

全局过滤器执行顺序

全局过滤器是指在所有路由规则中都会执行的过滤器,可以用于实现一些全局性的功能,如请求的日志记录、响应头信息的设置等。Spring Cloud Gateway提供了一些内置的全局过滤器,如请求路径的重写、请求日志的记录等。在Spring Cloud Gateway中,全局过滤器的执行顺序是由GatewayFilterAdapter的ORDER常量值确定的,该常量值为-2147483648,表示全局过滤器将在所有的局部过滤器之前执行。

局部过滤器执行顺序

局部过滤器是指只在特定路由规则中才会执行的过滤器,可以用于实现一些特定的功能,如请求鉴权、请求转发等。Spring Cloud Gateway中的局部过滤器可以通过自定义过滤器工厂类来实现,该工厂类需要继承AbstractGatewayFilterFactory抽象类,并实现其中的apply方法和泛型参数指定配置类。在Spring Cloud Gateway中,局部过滤器的执行顺序是由配置文件中的filters属性确定的,该属性可以通过spring.cloud.gateway.routes.filters参数进行配置,不同的过滤器在列表中的位置就决定了它们的执行顺序。

以下是一个示例,其中定义了一个全局过滤器和两个局部过滤器,演示了不同类型过滤器的执行顺序:

@Componentpublic class GlobalFilter implements GatewayFilter, Ordered {    @Override    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {        System.out.println("GlobalFilter before...");        return chain.filter(exchange).then(Mono.fromRunnable(() -> {            System.out.println("GlobalFilter after...");        }));    }    @Override    public int getOrder() {        return -1;    }}@Componentpublic class LocalFilter1 extends AbstractGatewayFilterFactory {    public LocalFilter1() {        super(Config.class);    }    @Override    public GatewayFilter apply(Config config) {        return (exchange, chain) -> {            System.out.println("LocalFilter1 before...");            return chain.filter(exchange).then(Mono.fromRunnable(() -> {                System.out.println("LocalFilter1 after...");            }));        };    }    public static class Config {        // 配置参数    }}@Componentpublic class LocalFilter2 extends AbstractGatewayFilterFactory {    public LocalFilter2() {        super(Config.class);    }    @Override    public GatewayFilter apply(Config config) {        return (exchange, chain) -> {            System.out.println("LocalFilter2 before...");            return chain.filter(exchange).then(Mono.fromRunnable(() -> {                System.out.println("LocalFilter2 after...");            }));        };    }    public static class Config {        // 配置参数    }}

在这个示例中,我们定义了一个全局过滤器GlobalFilter和两个局部过滤器LocalFilter1和LocalFilter2。其中,GlobalFilter实现了GatewayFilter和Ordered接口,用于实现全局过滤器的逻辑。LocalFilter1和LocalFilter2都继承了AbstractGatewayFilterFactory抽象类,并通过实现apply方法实现了局部过滤器的逻辑。在apply方法中,我们可以实现自己的过滤逻辑,并返回一个GatewayFilter对象。在GatewayFilter对象中,我们可以继续调用chain.filter方法来执行下一个过滤器,或者直接返回结果。这里我们使用Mono.fromRunnable方法来在请求结束时输出一些信息。

在上述示例中,我们定义了全局过滤器和两个局部过滤器。在执行顺序方面,由于全局过滤器的ORDER常量值最小,因此它会在所有的局部过滤器之前执行。而在局部过滤器的执行顺序方面,它们的执行顺序是由配置文件中的filters属性决定的,如下所示:

spring:  cloud:    gateway:      routes:      - id: example        uri: http://example.org        predicates:        - Path=/example/**        filters:        - LocalFilter2        - LocalFilter1

在这个配置文件中,我们为example路由规则指定了两个局部过滤器,分别是LocalFilter2和LocalFilter1。在执行顺序方面,LocalFilter2将会先于LocalFilter1执行,因为它们在filters列表中的位置是从前往后的。也就是说,请求先经过LocalFilter2,再经过LocalFilter1,最后再到达后端服务。

需要注意的是,在GatewayFilterChain中的filter方法调用中,如果其中一个过滤器返回了错误,那么整个请求处理过程会立即停止并返回错误。因此,在设计过滤器时需要格外小心,确保每个过滤器都不会抛出异常,以免影响整个系统的稳定性。

此外,还有一些其他的过滤器类型,如:

Pre Filter:在请求被路由之前调用。可以用来实现身份认证、IP过滤等逻辑。Post Filter:在请求被路由之后调用。可以用来实现响应头处理、日志记录等逻辑。Error Filter:在请求处理过程中发生错误时调用。可以用来实现异常处理、错误日志记录等逻辑。

这些过滤器类型可以通过实现不同的接口来实现。例如,实现Ordered和GatewayFilter接口的就是Pre Filter和Global Filter类型的过滤器。而实现Ordered和WebFilter接口的则是Error Filter类型的过滤器。

Spring Cloud Gateway过滤器的执行顺序|世界热文

2023-04-12

海昌海洋公园(02255)与沙特阿拉伯王国投资部签署合作备忘录 研究于沙特发展与文旅业态有关的投资机会

2023-04-12

中国科学家找到突破口 盐碱地有望告别“十年九不收”|环球速读

2023-04-12

泉为科技中标分布式并网光伏发电项目 供货金额50亿元_今热点

2023-04-12

每日关注!4月11日基金净值:华夏创新前沿股票最新净值2.502,跌0.48%

2023-04-12

财报速递:长青股份2022年全年净利润2.62亿元,总体财务状况不佳 全球时讯

2023-04-11

2023全国棉花交易市场棉业发展年会聚焦推动棉业大国向棉业强国转变-世界今亮点

2023-04-11

海绵体是什么_海绵体是啥

2023-04-11

以“继承与进化”为主题 丰田汽车公司公布上海车展参展阵容

2023-04-11

曹云金面馆开业显冷静,被嘲“关门大吉”,他还会重回德云社么?

2023-04-11

河南:拟建100所普通高中多样化发展省级示范校 新动态

2023-04-11

背水一战,起亚开启在华电动化反攻

2023-04-11

视点!2023年英国大学最难学专业盘点:这十大超难学专业!你的专业上榜了吗?

2023-04-11

厦图一季度阅读数据新鲜出炉 这些书籍最热门

2023-04-11

Keep,除了帕梅拉你还有什么-全球热点

2023-04-11

华润水泥控股(01313.HK)发盈警,预期一季度股东应占亏损约3500万港元至4500万港元 环球快消息

2023-04-11

国家统计局:3月PPI环比持平 钢材、水泥等行业价格有所上涨|今日快讯

2023-04-11

河南尉氏县小陈乡:小小羊肚菌 撑起乡村“致富伞”-世界资讯

2023-04-11

消逝的光芒怎么联机 消逝的光芒联机组队教程 全球观察

2023-04-11

造成腋臭的原因有哪些?腋臭会有哪些症状?-微动态

2023-04-11

天天热文:人民日报:江苏泰州举办溱潼会船节

2023-04-11

当前关注:龙湖集团:今年前三个月销售额507亿元 3月新增三幅地块

2023-04-11

德新科技:预计2023年1-3月盈利,净利润同比增88.97%至108.25%-世界今热点

2023-04-11

放假通知:连休4天!网友沸了

2023-04-10

世界观天下!新赛季中超升降级新规则:改为升2降2 外援报五上四

2023-04-10

中国中小企业发展大会上,“专精特新”企业拿出了哪些硬核产品

2023-04-10

【聚看点】马自达发布了最畅销跑车的更新和改进版本

2023-04-10

环球微资讯!高校今年首批特殊招生计划公布

2023-04-10

德阳市教育局机关志愿服务支队

2023-04-10

苯酐行情周报(4.3-4.9)

2023-04-10

苏州博物馆个人预约官网(附官网入口) 每日快讯

2023-04-10

今日视点:马丁内利推特:没有全取三分很难受,还有8场比赛可以去拼

2023-04-10

环球报道:抢钱俱乐部:黄金如期下跌,目标1935一米长阴!

2023-04-10

酒精过敏的症状图片_酒精过敏的症状特征是什么

2023-04-10

AgeNews | 小橙养老获得近亿元A轮融资;寿险与长护险责任转换业务将开启试点;银发女性3年淘系消费复合增长15%…

2023-04-10

3月第五周内蒙古煤炭价格环比下降_环球头条

2023-04-10

奥比岛挂机赚钱的地方(奥比岛外挂) 天天快报

2023-04-10

今日观点!【手慢无】租房党的绝搭!小鸭洗衣机低至358元

2023-04-10

当前视点!企业所得税退税说明书和情况说明书_退税说明书和情况说明书

2023-04-10

中国电影大数据盛典见面会举办,邓超、易烊千玺分享创作心得|观天下

2023-04-09

上海金偏强震荡—贵金属周报2023年第13期

2023-04-09

机构论后市丨主题炒作热度短期已到极致;维持科技中期主线判断

2023-04-09

《名校风暴》里的这位西班牙帅哥|赏色

2023-04-09

结婚送礼金有什么讲究-世界新要闻

2023-04-09

环球要闻:三月份是打鱼的季节吗(三月份捕鱼)

2023-04-09

【环球新要闻】合同到期!CBA顶级投手恐遭多支球队哄抢,上海男篮或全力引进

2023-04-09

全球播报:宇宙体积最大的盾牌座UY有多大?

2023-04-09

输球又输人!皇马大将赛后拳打对方球员,警方已介入调查

2023-04-09

天天最资讯丨且将新火试新茶

2023-04-09

四年级数学上册训练题_一年级下册数学练习题|世界短讯

2023-04-09

健康科普|如何识别帕金森病?海南医生:除了“手抖”,失眠焦虑也需警惕

2023-04-08

环球播报:奇瑞发布独立新能源电动品牌iCAR

2023-04-08

当前焦点!江西赣州:增亮绿水青山的底色

2023-04-08

【新要闻】提醒!广州部分社区医院尚有流感疫苗库存

2023-04-08

环球速讯:数字图片1到100图片_数字图片1到10图片

2023-04-08

天天百事通!年初至今科创50指数涨20.95% 17家科创板公司涨超一倍

2023-04-08

30余种水产预制菜参展第11届中国食材电商节-当前讯息

2023-04-08

世界今热点:空客将在天津建设第二条生产线

2023-04-08

气候投融资如何开展?生态环境部有这些动作-世界快报

2023-04-08

东阳光最新公告:2022年半年度权益分派10派2.7元 股权登记日为9月9日|关注

2023-04-08

东威科技:2022年归母净利润同比增长32.6%,约为2.1亿元

2023-04-08

沪苏浙教育发展论坛在江苏无锡举行 每日观察

2023-04-07

德州市高校图书馆联盟阅读推广活动启动仪式在德州学院举行

2023-04-07

世界滚动:韦尔股份:2022年净利9.9亿元,同比降77.88%

2023-04-07

世界热资讯!【2023年二季报】花生:下游库存有待消耗,现货价格能否开启新一轮上涨

2023-04-07

天天简讯:知名主播直播卖凤爪时竟出现蟑螂 主播回应:系蟑螂爬入自行熬制红油 并非来自售卖产品

2023-04-07

广东佛山产假2023年新规:2023佛山最新产假有多少天?

2023-04-07

发现一个怪现象:为啥大家都喜欢用微信支付,而不用支付宝支付?-天天速看料

2023-04-07

休斯顿火箭队是整个联盟最年轻的球队之一-天天新要闻

2023-04-07

retarded 热讯

2023-04-07

今天最新消息 上半年天津口岸RCEP项下享惠进口货值达19亿元 世界即时

2023-04-07

王琦:随着酱酒消费越来越理性,厂商之间务必通力合作

2023-04-07

全球微头条丨中原银行:董事长徐诺金辞任

2023-04-07

如何用池氯杀死杂草_适合送女生的礼物,便宜一点食物有哪些

2023-04-07

天天最资讯丨化妆后脱妆的正确方法,化妆后为什么会脱妆

2023-04-07

环球观点:德邦基金管理有限公司关于德邦半导体产业混合型发起式证券投资基金增加兴业证券为销售机构的公告

2023-04-07

马斯克能源转型愿景:坚持使用化石燃料将多付出4万亿美元成本|全球今热点

2023-04-07

不良人:降臣不慎露打底裤,李星云易容掩盖身份的原因令人心痛

2023-04-07

暖胃更暖心,湖北首家“小哥食堂”正式揭牌运营 视讯

2023-04-06

思亮信息拟设立2个全资子公司 注册资本均为500万

2023-04-06

2023年在重庆买新乘用车申领购车补贴需要什么材料?|全球观速讯

2023-04-06

全球短讯!上海推出“乐游长三角”假日专列,首发前往安徽六安

2023-04-06

速看:省外户口小孩在广州第一次办身份证要什么材料?

2023-04-06

Kakao涉嫌操纵股价被调查

2023-04-06

国家税务总局局长王军:房地产业1~2月份销售收入由负转正-速递

2023-04-06

泰坦尼克号的残骸的简笔画_泰坦尼克号的残骸 最新资讯

2023-04-06

快播:牛总_关于牛总介绍

2023-04-06

中央空调多少瓦 一匹空调为例计算空调的的功率讲解-天天精选

2023-04-06

浦发银行投资金条价格今天多少一克(2023年04月06日) 全球今头条

2023-04-06

全球聚焦:为什么现在sf网站都打不开了_为什么现在SF网站都打不开

2023-04-06

长月烬明OST阵容绝绝子 具体是怎么回事? 天天热文

2023-04-06

世界实时:杀手已死送礼物

2023-04-06

世界热资讯!唐立淇 【4.06日运】处女:有机会得到发展,天蝎:以退为进

2023-04-06

清明假期四川A级景区接待游客超256万人次

2023-04-06

环球热消息:重庆水务:融资净买入428.23万元,融资余额8291.81万元(04-04)

2023-04-06

【全球独家】南通通州兴东街道:协商议事进网格,乡村和谐促发展

2023-04-06

晒出配置及价格清单 凯越加装车载电脑

2023-04-05

观热点:穆西亚拉:德国杯出局很痛苦,尤其是手球送点让我感到恼火

2023-04-05

公司员工曝清明加班痛批领导?中国电科回应: 非集团公司所属成员单位和员工

2023-04-05

小网格 大作为 盘龙区昙华社区服务下沉网格实现全覆盖

2023-04-05