我正在 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(使用前将#替换为@)