GlobalFilter与WebFilter

时间:2019-10-17 09:40:59

标签: java spring spring-webflux spring-cloud-gateway

我正在Spring Cloud Gateway中迈出第一步。 在研究期间,我想更好地了解GlobalFilter的用法。具体来说,我打算每次针对每条路由应用一些过滤器。

阅读文档(reference)有两种方法可以实现我的目标。 第一种是使用GlobalFilter,第二种是在GatewayFilter中使用default-filters

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

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

我发现达到目标的唯一方法是直接使用WebFilterreference

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

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

先谢谢您!

1 个答案:

答案 0 :(得分:0)

如果您想为每条路由(YAML 中定义的路由以及网关本身中托管的控制器/端点)设置一个过滤器,WebFilter 应该是最佳选择。

如果您想要为所有路由设置过滤器,但不想为网关中托管的端点设置过滤器,那么您可以选择默认过滤器/全局过滤器。

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

我在源代码中注意到路由通过 FilteringWebHandler 并且网关内的端点直接映射到控制器方法,并且它们并没有真正通过这些处理程序(尽管它们通过普通的 WebFilter 进行) .因此,以上。