Spring Cloud Gateway结合Spring SecurityWebFilterChain时过滤器顺序如何工作?
SCG集成Spring Security的过滤器机制影响
SCG本身的过滤器逻辑会在Spring Security的认证鉴权完成之后才执行。Spring Security在WebFlux环境下基于WebFilter实现过滤器链,请求进入网关后会先被Spring Security拦截,完成身份校验、权限判定等逻辑,只有通过校验的请求才会进入SCG自身的过滤器处理链路,执行路由匹配、参数处理、请求转发等逻辑。如果Spring Security判定请求非法,会直接返回异常响应,不会触发任何SCG的过滤器逻辑。
Spring Security过滤器链与自定义网关过滤器的优先级对比
默认情况下Spring Security过滤器链的优先级远高于SCG体系内的自定义过滤器:
- Spring Security的WebFilter默认优先级为
-100 - SCG体系内的GlobalFilter、GatewayFilter默认都在优先级为10000+的区间执行,远低于Security的优先级
如果你自定义的是WebFilter类型的过滤器,可以手动指定优先级高于-100,就能在Spring Security之前执行;但如果是SCG专属的GlobalFilter、GatewayFilter,无论怎么设置优先级,都一定会在Spring Security校验通过之后才执行。
四类过滤器接口的核心区别
- WebFilter:Spring WebFlux的原生顶层过滤器接口,全局作用于所有进入Web服务的请求,不属于SCG专属组件,优先级通过
@Order注解或Ordered接口指定,Spring Security的过滤器链就是基于该接口实现。 - GlobalFilter:SCG专属的全局过滤器,仅对匹配到网关路由的请求生效,会和路由绑定的GatewayFilter共同组成SCG的请求处理链。
- GatewayFilter:SCG专属的路由级过滤器,仅作用于绑定了对应过滤器的特定路由,通常通过GatewayFilterFactory创建实例,配置在指定路由的规则中。
- OrderedGatewayFilter:GatewayFilter的子类,内置优先级属性,SCG会自动把未指定优先级的GlobalFilter、GatewayFilter都包装为OrderedGatewayFilter,用来统一排序整个SCG过滤器链的执行顺序。
内容的提问来源于stack exchange,提问作者David Gallego
相关产品推荐
相关产品推荐

