过滤器和拦截器的区别
过滤器(Filter)和拦截器(Interceptor)的区别
实现原理不同
过滤器基于函数回调,一般自定义过滤器都会实现一个DoFilter()方法,这个方法包含一个FilterChain参数,此参数实际为一个回调接口。
拦截器基于Java反射机制(动态代理)实现。
适用范围不同
过滤器Filter实现基于javax.servlet.Filter接口,此接口在Servlet规范中定义,因此过滤器Filter的使用依赖于Tomcat等容器,导致它只能在Web程序中使用。
拦截器Interceptor是Spring的一个组件,由Spring容器管理,可以单独使用。因此拦截器不仅能应用于web程序,也可以应用于Application、Swing等程序中。
使用场景不同
过滤器Filter通常用来实现通用功能过滤,例如:敏感词过滤、响应数据压缩等功能。
拦截器Interceptor更接近业务系统,主要用来实现项目中的业务判断,例如:日志记录、权限判断等业务。
触发时机不同
Filter是在请求进入Tomcat等容器后,在进入Servlet之前进行预处理,当Servlet完成处理后请求结束。
Inteceptor 是在请求进入Servlet后,在进入controller之前进行预处理,controller中渲染对应的视图后请求结束。
拦截的请求范围不同
请求的执行顺序是:进入Tomcat等容器-> 进入Filter->进入Servlet-> 进入Inteceptor-> 进入控制器Controller。
Filter和Interceptor的执行时间点不同,先执行Filter后再执行Interceptor,再是Controller,即真正要调用的方法。
过滤器和拦截器的区别
http://oowatermelon.github.io/OoWaterMelonS/2022/12/03/过滤器和拦截器的区别/