过滤器(filter)是基于servlet容器回调实现的,可以拦截请求和响应的所有内容,包括静态资源和动态资源。
拦截器(Interceptor):基于Spring框架,只作用于Spring的上下文中。拦截器只能拦截请求到达Controller之前,或者响应返回视图之前的处理。
实现方式:
过滤器是基于servlet规范中的Filter接口实现的。
拦截器是基于Spring的HandlerInterceptor接口实现
触发时机:
过滤器是在servlet执行前后进行处理的。
拦截器是在到达controller之前或返回视图之前进行拦截的。
应用场景:
过滤器主要用于过滤请求和响应,例如字符编码处理、安全控制、日志记录等。
拦截器可以进行更复杂的业务逻辑处理,例如权限控制、日志记录、性能监控、事务控制等。
执行机制
过滤器由servlet容器回调完成。
拦截器通过动态代理(反射)的方式实现。
生命周期
过滤器在servlet容器管理,在servlet生命周期。
拦截器是SpringIOC容器管理,可以获取到spring容器的bean。
| 过滤器 | 拦截器 |
基于框架/容器 | servlet容器 | SpringMVC |
实现接口 | Filter | HandlerInterceptor |
执行时机 | servlet处理前后 | controller执行/视图返回前 |
实现原理 | 函数回调 | AOP动态代理(反射) |
拦截情况 | 几乎可以拦截所有资源包括静态资源文件 | 一般只能拦截控制层,不能拦截静态资源 |
场景 | 字符编码、日志记录 | 权限控制、事务管 |