news 2026/1/9 8:43:56

Filter 的加载机制 和 Servlet 容器(如 Tomcat)的请求处理流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Filter 的加载机制 和 Servlet 容器(如 Tomcat)的请求处理流程

Spring Boot 中Filter 的加载机制Servlet 容器(如 Tomcat)的请求处理流程。下面我来系统性地解释为什么请求会先经过AuthFilter,以及整个流程背后的原理。


一、请求处理的基本流程(Servlet 规范)

在基于 Servlet 的 Web 应用(包括 Spring Boot 内嵌 Tomcat)中,所有 HTTP 请求都会先进入Servlet 容器(如 Tomcat),然后:

  1. 容器根据 URL 匹配对应的Filter 链(Filter Chain)
  2. 按照注册顺序依次执行每个 Filter 的doFilter()方法
  3. 所有 Filter 执行完后,才会将请求交给目标Servlet(在 Spring Boot 中通常是DispatcherServlet
  4. DispatcherServlet再将请求分发给对应的Controller

因此:Filter 是在 Controller 之前执行的,这是 Servlet 规范决定的。


二、Spring Boot 如何注册 Filter?

Spring Boot 提供了多种方式注册自定义 Filter,常见的是通过@Bean+FilterRegistrationBean

@Bean public FilterRegistrationBean<AuthFilter> authFilter() { FilterRegistrationBean<AuthFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new AuthFilter()); registration.setOrder(3); // 设置执行顺序 registration.addUrlPatterns("/*"); // 匹配所有请求 return registration; }
  • setOrder(3)表示该 Filter 在 Filter 链中的优先级(数字越小越先执行)
  • Spring Boot 启动时会自动扫描并注册这些FilterRegistrationBean
  • 最终,这些 Filter 会被注册到内嵌的Tomcat Servlet 容器

注意:除了自定义 Filter,Spring Security、字符编码 Filter(CharacterEncodingFilter)等也会被自动注册,它们也有各自的 Order。


三、Filter Chain 的执行顺序

Filter 的执行顺序由@Order注解或FilterRegistrationBean.setOrder()决定。例如:

OrderFilter 名称作用
1CharacterEncodingFilter设置请求/响应编码
2SomeLoggingFilter记录请求日志
3AuthFilter执行身份认证逻辑
...Other Filters其他过滤器
最后DispatcherServlet分发请求到 Controller

所以当一个请求进来时:

  1. Tomcat 构建匹配该 URL 的 Filter 链
  2. 按 Order 从小到大依次调用每个 Filter 的doFilter()
  3. 到达AuthFilter(Order=3)时,执行认证逻辑:
    • 如果认证失败 → 直接返回 401/403,不再继续调用 chain.doFilter()
    • 如果认证成功 → 调用chain.doFilter(request, response),继续下一个 Filter 或进入 Controller

四、为什么“验证通过后才会到达 Controller”?

因为 Filter 是前置拦截器。只有当所有 Filter 都调用了chain.doFilter(),请求才会最终传递给DispatcherServlet,进而路由到你的@RestController

如果AuthFilter发现 token 无效,它可以直接:

response.setStatus(HttpStatus.UNAUTHORIZED.value()); return; // 不调用 chain.doFilter()

这样请求就不会继续向下传递,Controller 根本不会被执行。


五、总结:关键点

关键点说明
Filter 是 Servlet 规范的一部分所有请求必须先经过 Filter 链
Spring Boot 自动注册 Filter通过FilterRegistrationBean@WebFilter
执行顺序由 Order 决定数字越小越先执行
AuthFilter 在 Order=3 位置在它之前的 Filter 已执行,之后的还没执行
认证失败可中断链路不调用chain.doFilter()即可阻止请求到达 Controller

补充建议

  • 如果使用Spring Security,通常不需要手写AuthFilter,因为 Security 本身就是一个强大的 Filter(springSecurityFilterChain),且 Order 非常靠前(默认 -100)。
  • 手动实现认证 Filter 适用于轻量级场景或定制需求。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/4 11:57:47

英文音频也能处理?HeyGem多语言支持情况调查

英文音频也能处理&#xff1f;HeyGem多语言支持情况调查 在AI内容创作日益普及的今天&#xff0c;企业对高效、低成本生成高质量视频的需求正以前所未有的速度增长。尤其在跨国业务场景中&#xff0c;如何让一个“中国面孔”的讲师自然地说出流利的英文讲解&#xff0c;而不是依…

作者头像 李华
网站建设 2026/1/7 0:26:26

【收藏必看】一文搞懂工作流与智能体的本质区别,避免AI转型踩坑

很多朋友把工作流误认为智能体&#xff0c;今天就来专门聊聊他们的区别&#xff0c;你是否经常听到这样的宣传&#xff1a;“用AI智能体自动化你的工作”&#xff1f;但是当你真正使用时&#xff0c;却发现效果并不理想&#xff1f;问题很可能在于——你错把工作流当成了智能体…

作者头像 李华
网站建设 2026/1/4 11:56:45

Stable Diffusion生成背景图:与HeyGem数字人融合创意实验

Stable Diffusion生成背景图&#xff1a;与HeyGem数字人融合创意实验 在短视频内容井喷的今天&#xff0c;企业对高质量数字人视频的需求早已从“能说话”升级为“会表达”。一个只会口型同步、站在纯色绿幕前播报的虚拟主播&#xff0c;已经难以满足品牌传播的专业要求。真正打…

作者头像 李华
网站建设 2026/1/4 11:56:40

前Meta科学家揭秘大模型推理与可解释性,助你快速掌握AI核心技术!

简介 前Meta AI科学家田渊栋分享职业转变经历&#xff0c;深入探讨大模型推理优化技术&#xff08;连续隐空间推理、Token Assorted等&#xff09;及可解释性研究的重要性。他认为无论Scaling路径是否成功&#xff0c;理解AI黑箱对确保AI安全和推动技术发展都至关重要&#xf…

作者头像 李华
网站建设 2026/1/4 11:56:17

抖音虚拟主播审核规则:使用HeyGem生成内容需注意合规

抖音虚拟主播审核规则&#xff1a;使用HeyGem生成内容需注意合规 在短视频内容爆发式增长的今天&#xff0c;AI驱动的数字人技术正以前所未有的速度重塑内容生产方式。尤其是抖音平台上&#xff0c;越来越多品牌与创作者开始尝试用“虚拟主播”进行直播带货、产品宣传和IP运营…

作者头像 李华