1. 触发时机不同
过滤器:过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的,请求结束返回也是,是在servlet处理完后,返回给前端之前。
拦截器:拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring
2. 实现方式不同
过滤器:基于回调函数,由Servlet容器回调完成。Filter是依赖于Servlet容器,属于Servlet规范的一部分,生命周期由Servlet容器管理。
拦截器:基于反射,常通过动态代理(反射)的方式来执行。拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。
3. 获取资源的区别
过滤器(Filter) :可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息。
拦截器(Interceptor):可以拿到你请求的控制器和方法,却拿不到请求方法的参数。
切片(Aspect): 可以拿到方法的参数,但是却拿不到http请求和响应的对象
文章参考网址:https://zhuanlan.zhihu.com/p/340397290