GlobalFilter 与 WebFilter

2024-02-23

我正在 Spring Cloud Gateway 中迈出第一步。 在学习过程中,我想更好地了解GlobalFilter。具体来说,我打算每次都应用一些过滤器every route.

阅读文档(参考 https://cloud.spring.io/spring-cloud-gateway/reference/html/#global-filters)有两种方法可以实现我的目标。 第一个是使用GlobalFilter第二个是要有一个GatewayFilter in default-filters.

这两种解决方案都效果很好,but仅适用于 YAML 配置中定义的路由。 如果我有任何 RouteLocator 或 RouterFunctions,我每次都需要声明过滤器

.filters(f -> f.globalFilter("something"))

我发现实现目标的唯一方法是直接使用WebFilter (参考 https://www.baeldung.com/spring-webflux-filters)

所以我的问题是是否有人可以解释这两个过滤器之间的区别GatewayFilter/GlobalFilter and Webfilter

也许答案在Spring文档中,但我找不到它。

先感谢您!


如果您希望为每个路由(对于 YAML 中定义的路由以及网关本身托管的控制器/端点)都有一个过滤器,WebFilter应该是要走的路。

如果您想要对所有路由进行过滤,但不需要对网关中托管的端点进行过滤,那么您可以选择“默认过滤器”/“全局过滤器”。

最后,您可以为特定路由配置网关过滤器。

我在源代码中注意到路线经过FilteringWebHandler并且网关内的端点直接映射到控制器方法,并且它们并不真正通过这些处理程序(尽管它们通过普通的 WebFilters)。于是就有了以上的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GlobalFilter 与 WebFilter 的相关文章

随机推荐