Appearance
SpringMVC的拦截器和过滤器有什么区别?执行顺序?
拦截器和过滤器在Web应用中都扮演着请求和响应处理的角色,但它们之间存在一些关键区别。
首先,归属不同。拦截器是SpringMVC框架的一部分,而过滤器是Servlet规范的一部分。拦截器主要用于对控制器层的请求进行处理,它们提供了更细粒度的控制,可以在请求进入控制器之前和之后执行特定的逻辑,例如身份验证、日志记录和权限检查。过滤器独立于SpringMVC,用于处理通用的请求和响应内容,例如字符编码、压缩和安全性。
其次,执行顺序也不同。拦截器的执行顺序由配置文件中的顺序决定,可以有多个拦截器,它们按照配置的顺序依次执行。而过滤器的执行顺序由web.xml文件中的配置顺序决定,同样可以有多个过滤器,按照配置的顺序执行。一般来说,首先执行过滤器,然后再执行拦截器。
最后,用途不同。拦截器用于对SpringMVC的请求和响应进行特定的业务处理,通常与控制器层的请求处理有关。过滤器用于对所有Servlet请求和响应进行通用性的处理,通常关注请求和响应内容,而不涉及具体的业务逻辑。
总的来说,了解拦截器和过滤器之间的这些区别非常重要。在面试中,这种理解将有助于说明您在Web应用程序中如何处理请求和响应以及如何利用SpringMVC和Servlet规范的不同功能。
视频:https://www.bilibili.com/video/BV1mf4y1c7cV?p=72&vd_source=fa810d8b8d6765676cb343ada918d6eb
更新: 2024-03-08 10:40:53
原文: https://www.yuque.com/tulingzhouyu/db22bv/ls1c6qxmrgedfwvf
短视频
** 过滤器和拦截器的区别是什么,一个工作了三年的程序员 居然不知道,还跟我说为什么找工作这么难..结果一问都是些很简单的问题. 那我有整理一份80万字的八股文资料,里面基本都涵盖他遇到的这些面试题,需要的小伙伴可以再评论区扣666。**
我来给大家说下过滤器和拦截器的区别
首先过滤器和拦截器都可以在请求过程中插入一手,也可以拦腰截断。
他们的执行过程是这样的:
当一个请求进来!会先交给Web服务器提供的过滤器,再来到Servlet,那这个时候呢.. 有一个叫DispatcherServlet 的Servlet就会执行!在DispatcherServlet 中就会调用我们的拦截器,再由DispatcherServlet 分发给对应的Controller 处理我们的请求。
请求处理完之后呢..从调用的链路原路返回,再回到拦截器, 然后再回到过滤器,最终响应给客户端!

所以他们的区别就是:
**过滤器,它先执行 ,****它是Servlet规范的一部分,**更接近于底层,它会在Servlet 请求之前和响应之后 进行处理。
**拦截器,它后执行,****它是SpringMVC的一部分,更接近业务层, **会在Controller 请求之前和处理完毕之后进行处理。
其次呢,他们的使用方式也不同
过滤器,需要依赖Servlet容器提供的Filter接口,多个过滤器根据配置顺序决定他们的执行顺序。
而 拦截器,需要依赖SpringMVC提供的HandlerInterceptor接口,多个拦截器的执行顺序由bean的配置顺序决定,可以通过Order注解来改变执行顺序。
最后,他们的用途不同。
拦截器通常用来实现一跟业务相关不是必须的工作 像** **身份认证与授权,接口的性能监控,跨域处理,日志记录 等。
而过滤器通常实现那些必要的基础设施工作 , 像编码处理、视图响应、请求参数处理和URL重定向 等。
所以!我们平常面向业务开发基本用不到过滤器, 用拦截器基本就已经满足我们的基本需求,而且拦截器天然集成spring,可以直接把bean自动装配进行,可以非常方便的执行业务处理。
更新: 2024-05-10 15:10:37
原文: https://www.yuque.com/tulingzhouyu/db22bv/wypw6aid1tf8l9x1