SpringCloud 过滤器、拦截器完整区分:不全在网关,分三层
目录一、先分清三个概念所属位置完全不同二、详细分层执行顺序请求流向1. 网关过滤器仅网关模块所有微服务统一入口2. Servlet Filter每个业务微服务内非网关3. SpringMVC 拦截器 HandlerInterceptor每个业务微服务内非网关三、核心问题解答都在网关吗四、选型使用场景开发怎么选五、关键执行顺序总结补充旧版 Zuul已淘汰一、先分清三个概念所属位置完全不同Gateway 全局 / 局部过滤器Spring Cloud Gateway 专属位置网关服务只作用在网关层SpringMVC 拦截器 HandlerInterceptor位置每个微服务内部Controller 层前Servlet Filter原生 Java 过滤器位置每个微服务内部在 Servlet 容器最外层早于拦截器执行二、详细分层执行顺序请求流向客户端请求 → Gateway 网关过滤器 → 微服务 Servlet Filter → SpringMVC 拦截器 → Controller1. 网关过滤器仅网关模块所有微服务统一入口SpringCloud Gateway 独有只写在 gateway 工程里分两类全局过滤器 GlobalFilter所有路由请求都会执行统一鉴权、限流、跨域、日志、重写路径局部过滤器 GatewayFilter只针对某一条路由配置比如单独给某个接口加超时、重试示例结构gateway 模块javaComponent public class AuthGlobalFilter implements GlobalFilter, Ordered { Override public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 网关统一token校验 return chain.filter(exchange); } }✅ 作用范围所有访问微服务的请求适合全局统一拦截不用每个服务重复写鉴权2. Servlet Filter每个业务微服务内非网关基于javax.servlet.Filter/jakarta.servlet.Filter容器级别过滤器 执行时机请求进入 SpringMVC 之前 使用方式WebFilter注解FilterRegistrationBean注册 适用编码处理、XSS 过滤、流缓存多次读取请求体 位置user、order、product 等业务微服务网关不使用这套3. SpringMVC 拦截器 HandlerInterceptor每个业务微服务内非网关SpringMVC 框架提供只拦截 Controller 请求不拦截静态资源 注册实现WebMvcConfigureraddInterceptors()执行时机Servlet Filter 之后Controller 方法之前 适用接口日志、用户信息注入、接口权限校验单服务维度java// 写在业务微服务不是网关 Component public class LoginInterceptor implements HandlerInterceptor {} Configuration public class WebConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**); } }三、核心问题解答都在网关吗不是分两处存放网关层过滤器只存在gateway网关模块负责全链路统一拦截Servlet Filter MVC 拦截器写在各个业务微服务user/order 等只拦截当前服务内部接口。四、选型使用场景开发怎么选全局统一鉴权、限流、路由转发、跨域→ 网关 GlobalFilter单服务接口校验、操作日志、本地用户上下文→ MVC 拦截器请求流处理、XSS、字符编码、底层请求包装→ Servlet Filter五、关键执行顺序总结Gateway 网关过滤器最先业务服务 Servlet Filter业务服务 HandlerInterceptor 拦截器Controller 控制器返回时逆序执行补充旧版 Zuul已淘汰Zuul 也有自己的 Filter同样只在网关工程和 Gateway 过滤器逻辑类似现在项目基本不用。