在 Spring Web 开发中,我们经常会用到过滤器做登录鉴权、接口限流、请求日志、参数处理,很多人分不清普通Filter和OncePerRequestFilter的区别,本文一分钟讲清核心用法与场景。
一、什么是「一次请求」
客户端(浏览器/APP)发起一次 HTTP 调用,就称为一次请求。
整个过程客户端只发送一次网络请求,不会重复调用。
二、普通 Filter 为什么会重复执行?
Servlet 容器中,同一次客户端请求在服务端内部发生forward请求转发、include页面包含、异步调用时,会多次匹配过滤器规则,导致同一个逻辑重复执行。
举个实际场景:
客户端请求/user/info,服务端内部转发到/user/detail。
- 访问
/user/info:Filter 执行一次 - 内部转发
/user/detail:Filter 再执行一次
客户端明明只请求了一次,过滤器却跑了两次。