springmvc拦截器和过滤器的区别
时间: 2025-03-02 18:12:55 浏览: 39
### Spring MVC 中拦截器与过滤器的区别
#### 定义与功能范围
- **过滤器 (Filter)** 是 Servlet 规范的一部分,因此其适用范围更广。任何进入 Web 应用程序的 HTTP 请求都会经过 Filter 处理[^1]。这意味着无论请求的目标是否为 Spring MVC 控制器,只要配置了相应的 URL 模式匹配,则会触发 Filter 执行逻辑。
- **拦截器 (Interceptor)** 属于 Spring MVC 特有的机制,专注于对框架内部管理下的控制器方法调用实施控制[^2]。只有当请求被 DispatcherServlet 路由至某个具体的 Controller 方法时才会激活 Interceptor。
#### 工作时机差异
- 过滤器会在整个应用程序接收到客户端发出的数据包之后立即生效,在到达目标资源之前先行介入并作出初步判断或修改响应内容;如果允许继续前进则交给后续环节处理,反之可以直接终止流程返回错误信息给前端用户。
- 拦截器位于更为深入的一层——即在已经确认是由 Spring MVC 来负责解析当前路径所指向的具体业务逻辑单元的前提下才发挥作用。此时不仅可以获取更多关于上下文环境的信息(如 Session),还能针对特定类型的事务场景定制化前置/后置动作序列[^3]。
#### 配置方式不同
对于 Java EE 平台上的标准组件来说,Filters 可以通过 web.xml 文件声明式注册或者借助 @WebFilter 注解实现编程式的动态加载。相比之下,Interceptors 则依赖 spring-mvc 或者 application.properties/yml 下的相关属性来指定,并且通常需要配合 HandlerMapping 接口完成链路组装工作。
```xml
<!-- Example of configuring a filter in web.xml -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
```java
// Example of registering an interceptor programmatically within Spring configuration class
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyCustomInterceptor())
.addPathPatterns("/api/**");
}
}
```
阅读全文
相关推荐


















