在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类型的过滤器。
X 关闭
- 1、全球滚动:Spring Cloud Gateway过滤器的执行顺序
- 2、【环球热闻】华秦科技(688281.SH):一季度扣非净利润预增77.56%、订单加紧落地
- 3、4月11日绍兴轻纺城纯涤纱价格继续下行
- 4、“我想@领导”又又又上新!官方社群矩阵助力“急难愁盼”高效解决!
- 5、怎么预防感冒呢_怎么预防感冒_全球热门
- 6、环球热消息:上海盒马物联网公司法定代表人变更
- 7、【全球播资讯】民生证券给予中国卫星谨慎推荐评级:归母净利润同比增长22%;受益于航天产业发展
- 8、中信证券:“西氢东送”纳国家规划 “制-储-用”均获催化|天天微资讯
- 9、覃丽花:小小绣花针 绣出大天地
- 10、黄金价格上涨 消费整体平稳|焦点简讯
-
乒乓球脑筋急转弯:与机器人比赛让我们的大脑更努力地工作 世界看热讯
作为她高中网球队的队长和大学四年网球校队的老将,AmandaStudnicki多年来一直在为这一刻训练。她现在所要做
-
【播资讯】造梦西游3兑换码有哪些造梦西游3兑换码大全2023
造梦西游3兑换码有哪些造梦西游3兑换码大全2023,本站每日都会整理更新一些实时资讯内容,有兴趣的跟着本站接着往下看看吧!
-
烘干机可以放在木地板上吗?-讯息
可以放在木地板上,没有影响烘干机有带式烘干,滚筒烘干,箱式烘干,塔式烘干等几种模式;热源有煤,电,气等;物料在烘干过程中有热风气流式
-
打火锅必备清单_打火锅必备食材
1、蔬菜:西红柿、白菜、生菜、莴笋叶子、土豆、藕、白萝卜、豌豆苗、菠菜、茼蒿、香菜等等。2、2、肉类:牛肉片、猪肉片、羊
-
4月10日基金净值:财通资管均衡价值一年持有期混合最新净值1.1187,跌1.54%_当前播报
4月10日,财通资管均衡价值一年持有期混合最新单位净值为1 1187元,累计净值为1 1187元,较前一交易日下跌1 54%。历史数据显示该基金近1个月上
-
世界热消息:艺人龚俊收购一家科技公司
北京奇科易理科技有限公司发生工商变更,原全资股东北京浩东智渊物业管理发展有限公司退出,新增上海旭骏文化传媒有限公司为股东。
-
早期鱼类游泳速度如何演化?4.1亿年前九尾狐甲鱼化石研究揭秘
中新网北京4月10日电(记者孙自法)早期鱼类游泳速度如何演化?传统的“积极的捕食策略倾向导致有颌类起源”假说是正确答案吗?中国科学院古脊椎
-
深度分析信也科技在人工智能领域的巨大投资价值
这是一个积极的成就,因为该公司还将其借款人的“质量”从2021年第四季度的63%提高到了2022年第四季度的77%。在第2年到第5年,我们预测信也科
-
焦点滚动:河南商丘一景区工作人员轮番棒打骆驼引发关注
近日,在河南商丘一景区,工作人员轮番棒打骆驼的相关视频引发网友关注。目击者李女士告诉大众网·海报新闻记者,当时游客非常多,自己带着孩
-
焦点报道:B站UWP版停止维护
【环球网科技综合报道】4月10日消息,B站于近日终止了UWP版本客户端的维护。资料显示,哔哩哔哩UWP版是B站官方专门为Windows10以及Windows10Mo