过滤器Filter并不是springboot框架的东西,但tomcat集成了它。拦截器Interceptor是springboot的组件。所以两者是可以同时存在的,执行流程如下图
浏览器(客户端)发送请求,先经过过滤器Filter执行放行前逻辑,放行后到springboot环境中。又因为tomcat是servelet程序,并不会识别controller程序。但是springboot提供了一个servelet程序,叫做dispatchServelet(前端控制器),所以过滤器放行后会到dispatchServelet,然后再进入拦截器Interceptor执行preHandle的方法,如果preHandle方法返回true,就放行到contoller层,controller做出响应后,将响应返回->Interceptor,执行postHandle和afterCompletion(afterCompletion是页面资源加载完后才执行)->dispatchServelet->Filter->浏览器(客户端)
Filter和Interceptor的区别:
1.接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口
2.拦截范围不同:过滤器会拦截所有的资源,而Interceptor只会拦截springboot环境内的资源