1、底层原理不同
过滤器的底层是使用函数回调的方式进行实现。而拦截器是基于Java的动态代理进行实现。
2、使用范围不同:
过滤器(filter)是实现了javax.servlet.fiter这个接口。这个接口呢它是servlet容器来进行定义的。也就是说过滤器只能在servlet容器中进行使用即web应用程序。
拦截器(interceptor)是spring的一个组件,由spring容器进行管理。并不依赖Tomcat容器,是可以进行单独使用的。它不仅可以在servlet中进行使用还可以在application中使用。
3、触发的时机不同
过滤器是在请求进入容器后,但是在servlet之前进行处理。
拦截器是在servlet之后,在进入controller之前进行处理。
4、拦截的请求不同
过滤器它是在servlet之前及请求进入tomcat之后才进行过滤请求。那么它几乎可以对所有的请问进行一个过滤。
拦截器它是在servlet之后及controller之前进行拦截。他在执行之前会有前置处理器以及后置处理器的handlerMapping映射的一个过程。所以说拦截器它拦截的请求只是映射到controller上面的请求。