一个请求进来的时候,先交给web服务器提供的过滤器,例如springboot项目,提供的服务器也就是内置的tomcat,过滤器处理完成以后,然后会来到servlet,有一个dispatcherServlet会调用拦截器,再由dispatcherServlet分发给对应的Controller,处理完请求后,会原路返回,再回到拦截器,再回到过滤器,最终响应给客户端
请求->Tomcat->Filter->Servlet->Interceptor->Controller->Deal-Controller->Interceptor->Servlet->Filter->Tomcat->给客户端返回
过滤器Filter
- 过滤器会先执行,他是servlet的一部分,更接近于底层,会在servlet请求之前和响应之后进行处理进行执行
- 实现方式:依赖servlet提供的Filter接口,多个过滤器可以根据配置,来确定他们执行的顺序
- 用法区别:过滤器通常会用于实现必要的基础设施工作,如编码处理,视图响应,请求参数处理,URL重定向等
拦截器Interceptor
- 拦截器会后执行,他是springmvc的一部分,更接近于业务层,会在Controller请求之前和处理之后进行执行
- 实现方式:依赖SpringMVC提供的handlerInterceptor接口,多个拦截器的执行顺序由Bean 的配置顺序来决定,可以通过@Order注解来改变执行顺序
- 用法区别:拦截器通常用于执行一些和业务相关,不是必须的一些工作,比如身份认证与授权,接口的性能检测,跨域处理,日志记录等