Gateway过滤器的加载执行逻辑按照责任链的实际模式进行设计。GatewayFilter借助GatewayFilterChain实现责任链模式,按照过滤器的顺序依次执行对应过滤器。
流程如下:
关于GatewayFilter和GatewayFilterChain的接口定义如下:
执行流程如下:
a. 首次调用,在FilteringWebHandler的handle中,将Gateway的集合注入,并执行filter方法,如下图:
b. 调用filter时,从上一步传入的GatewayFilter过滤器列表中获取到一个过滤器,此时默认为0。调用第一个GatewayFilter.filter方法,需要构建一个DefaultGatewayFilterChain对象传入。
c.此时调用第一个Gateway的filter方法,按照顺序先执行RemoveCachedBodyFilter,最终执行完成业务后,又调用了传入DefaultGatewayFilterChain对象的filter。
d.后续反复执行b、c两步,直到GatewayFilter列表调用完成,或者中间出现异常终端。