乐趣区

关于springboot:spring-gateway的gatewayFilter和GlobalFilter执行顺序

gateway 有两种 filter,第一种 gatewayFilter(Route Filter)就是在 yml 配置文件里定义的,比方

discovery:
    locator:
        enabled: true
        filters:
            - StripPrefix=1

这里的 StripPrefix 就是 gatewayFilter,是在 StripPrefixGatewayFilterFactory 里定义的,这个 filter 的执行程序是 1(源码在 RouteDefinitionRouteLocator 的 loadGatewayFilters 办法,这里会加载配置,失去 filter 和参数值,而后按配置的程序,默认进行排序,比方这里的 StripPrefix 是第一个,那他的 order 值就是 1)

GlobalFilter 就是个别自定义的 filter 了,编写一个 spring 组件,继承 GlobalFilter 和 Ordered 即可

他们两种 filter 的执行程序都是由 order 来定义的,具体源码在 FilterWebHandler 的 handle 办法,先拿到配置文件里的 gatewayFilter,在拿 GlobalFilter,而后排序失去最终的执行程序。

退出移动版