springmvc拦截器和过滤器
时间: 2025-05-17 22:16:53 浏览: 19
### Spring MVC拦截器与过滤器的区别及使用场景
#### 一、所属框架与层次
Spring MVC拦截器属于Spring框架的一部分,主要用于处理Web层逻辑中的请求和响应。它运行在DispatcherServlet之后,因此可以访问到更多的Spring上下文信息[^1]。
相比之下,Servlet过滤器是一个独立于具体框架的标准Java EE组件,适用于任何基于Servlet的应用程序。它的主要职责是在请求到达目标资源之前对其进行预处理,在响应返回客户端之前进行后处理。
---
#### 二、功能粒度差异
过滤器的功能较为单一,仅能操作HTTP请求和响应对象,无法深入到业务方法内部。而Spring MVC拦截器则更为灵活,可以在控制器方法执行前、视图渲染完成后以及发生异常时介入处理[^2]。这种细粒度控制使得拦截器更适合复杂的业务需求。
---
#### 三、配置方式对比
##### **过滤器**
通过`web.xml`或者注解形式注册Filter类来完成初始化工作。例如:
```xml
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
上述XML片段展示了如何指定一个全局生效的过滤器实例[^3]。
##### **拦截器**
需借助Spring配置文件或Java Config模式声明对应的Interceptor Bean并绑定至特定路径上。下面是一段典型的Java代码示例展示如何创建自定义拦截器:
```java
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Pre Handle method is called");
return true; // 如果返回false,则终止后续流程
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("Post Handle method is called");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("After Completion callback method is invoked");
}
}
```
接着将其加入到拦截链中:
```java
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor()).addPathPatterns("/api/**"); // 只针对/api开头的URL应用此拦截器
}
}
```
以上实现了对部分API接口的安全校验或其他前置条件验证等功能[^4]。
---
#### 四、执行顺序说明
当存在多个拦截器组成链条结构时,遵循先进先出原则依次调用各自的preHandle方法;而在afterCompletion阶段则是逆序触发回调函数[^5]。这有助于开发者合理安排各环节的任务分配。
---
### 总结
综上所述,虽然二者都能起到类似的作用——即围绕着HTTP交互过程附加额外行为,但由于定位不同决定了其适用范围有所侧重。对于简单的跨域设置或是日志记录等工作推荐采用轻量级的Filter方案即可满足需求;而对于那些紧密关联业务规则的操作建议优先考虑利用强大的Spring Interceptor机制加以实现。
---
阅读全文
相关推荐


















