一、区别
- 实现原理
- 使用和适用范围
- 使用场景
- 触发时机
- 请求顺序
二、具体展开说明
2.1 实现原理
过滤器Filter :基于函数也就是方法回调来完成拦截和放行的操作。
拦截器(interceptor):拦截器则是通过Java 反射机制(动态代理)来实现。
2.2 使用和适用范围
过滤器Filter :filter 是最早的基于Java 基础的 Servlet 的规范定义的,所以 filter 依赖于tomcat 等基本只用于JavaWeb 项目
拦截器(interceptor):由 spring 提供的单独组件,由 spring 管理与 tomcat 无关所以不依赖 tomcat 可以单独使用。
拦截器不仅用于web 也可以用于 Application.Swing 等。
2.3 使用场景
过滤器Filter :更多的用于请求拦截,对请求做基本加工等其他统一的基本功能性操作,但用于检查权限等也不是不可以。
拦截器(interceptor):更贴合系统本身的业务操作,例如权限、日志、业务系统有效检查,是否可用等等。但也可以用于一般的请求和响应拦截。
2.4 触发时机
过滤器Filter :在请求进入 Servlet 之前开始,在 Servlet 处理完成后结束。
拦截器(interceptor):在请求进入 Servlet 之后,在进入 controller 之前,controller 渲染视图完成后结束。