wordpress免费网站模板下载地址外贸海外推广
2026/5/21 16:09:03 网站建设 项目流程
wordpress免费网站模板下载地址,外贸海外推广,帝国网站模板建设,北京的软件公司Spring Boot 中 Filter 的加载机制 和 Servlet 容器#xff08;如 Tomcat#xff09;的请求处理流程。下面我来系统性地解释为什么请求会先经过 AuthFilter#xff0c;以及整个流程背后的原理。一、请求处理的基本流程#xff08;Servlet 规范#xff09;在基于 Servlet 的…Spring Boot 中Filter 的加载机制和Servlet 容器如 Tomcat的请求处理流程。下面我来系统性地解释为什么请求会先经过AuthFilter以及整个流程背后的原理。一、请求处理的基本流程Servlet 规范在基于 Servlet 的 Web 应用包括 Spring Boot 内嵌 Tomcat中所有 HTTP 请求都会先进入Servlet 容器如 Tomcat然后容器根据 URL 匹配对应的Filter 链Filter Chain按照注册顺序依次执行每个 Filter 的doFilter()方法所有 Filter 执行完后才会将请求交给目标Servlet在 Spring Boot 中通常是DispatcherServletDispatcherServlet再将请求分发给对应的Controller因此Filter 是在 Controller 之前执行的这是 Servlet 规范决定的。二、Spring Boot 如何注册 FilterSpring Boot 提供了多种方式注册自定义 Filter常见的是通过BeanFilterRegistrationBeanBean public FilterRegistrationBeanAuthFilter authFilter() { FilterRegistrationBeanAuthFilter registration new FilterRegistrationBean(); registration.setFilter(new AuthFilter()); registration.setOrder(3); // 设置执行顺序 registration.addUrlPatterns(/*); // 匹配所有请求 return registration; }setOrder(3)表示该 Filter 在 Filter 链中的优先级数字越小越先执行Spring Boot 启动时会自动扫描并注册这些FilterRegistrationBean最终这些 Filter 会被注册到内嵌的Tomcat Servlet 容器中注意除了自定义 FilterSpring Security、字符编码 FilterCharacterEncodingFilter等也会被自动注册它们也有各自的 Order。三、Filter Chain 的执行顺序Filter 的执行顺序由Order注解或FilterRegistrationBean.setOrder()决定。例如OrderFilter 名称作用1CharacterEncodingFilter设置请求/响应编码2SomeLoggingFilter记录请求日志3AuthFilter执行身份认证逻辑✅...Other Filters其他过滤器最后DispatcherServlet分发请求到 Controller所以当一个请求进来时Tomcat 构建匹配该 URL 的 Filter 链按 Order 从小到大依次调用每个 Filter 的doFilter()到达AuthFilterOrder3时执行认证逻辑如果认证失败 → 直接返回 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 在 Order3 位置在它之前的 Filter 已执行之后的还没执行认证失败可中断链路不调用chain.doFilter()即可阻止请求到达 Controller补充建议如果使用Spring Security通常不需要手写AuthFilter因为 Security 本身就是一个强大的 FilterspringSecurityFilterChain且 Order 非常靠前默认 -100。手动实现认证 Filter 适用于轻量级场景或定制需求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询