过滤器(Fliter) | 拦截器(Interceptor) | 总结 | |
定义位置 | Fliter定义在java.servlet包下 | 接口HandlerInterceptor定义在org.springframework.web.servlet包下 | |
配置位置 | 配置在web.xml中 | 配置在springmvc.xml中 | |
作用位置 | Fliter在值Servlet前后起作用,Fliter通常不考虑servlet的实现 | 拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具体方法具有更大的弹性,允许用户接入(hook into)请求的生命周期。 | 在Spring构架的程序中,要优先使用拦截器,几乎所有Fliter能够做的事情,interceptor都能够轻松实现 |
使用范围 | 接口服务端 | 拦截器既可以用于Web程序,也可以用于Application、Swing程序中 | |
遵循规范 | Fliter是Servlet规范规定的 | 拦截器在Spring容器内,是Spring框架支持的。 | |
与Spring关系 | Fliter不能使用Spring容器资源 | Interceptor是被Spring调用。 | Spring中使用Interceptor更容易 |
调用方 | Fliter是被Server(例如Tomcat)调用 | Interceptor是被Spring调用。 | Fliter总是优先于Interceptor执行 |
实现方式 | Fliter基于回调函数 | Interceptor基于java反射 |