过滤器Filter vs 拦截器Interceptor

过滤器Filter

JavaWeb三大组件之一,可以把对资源的请求拦截下来,实现一些特殊功能,比如登录校验、统一编码处理、敏感字符处理等

拦截器 Interceptor

概念:一种动态拦截方法调用的机制,类似于Filter,Spring框架提供,用于动态拦截控制器方法的执行
作用:拦截请求,在指定的方法调用的前后,根据业务需要执行预先设定的代码

拦截器的执行流程:

  • 注:org.springframework.web.servlet.DispatcherServlet
    • tomcat服务器是一个Servlet容器,它不识别spring框架定义的controller,因此springweb提供了用于拦截匹配请求的前置控制器DispatcherServlet拦截匹配的请求,把拦截下来的请求,依据相应的规则分发到目标Controller来处理。Servlet拦截匹配规则要自己定义,DispatcherServlet配置在web.xml文件中,是配置spring MVC的第一步。

过滤器和拦截器的区别与联系

过滤器和拦截器都可以实现例如编码设置、日志记录、权限控制等功能,但是二者在使用范围、触发时机、拦截范围等方面均有较大区别:

  • 实现原理不同:
    • Filter是基于函数回调实现的
    • Interceptor是基于反射实现的,主要原因是拦截器内部的三个方法都提供了handler参数,该参数是利用反射动态创建而来
  • 使用范围不同:
    • 过滤器实现了javax.servlet.Filter接口,也就是说过滤器的使用要依赖于Tomcat等容器,所以它只能在web程序中使用。
    • 拦截器Interceptor实现了org.springframework.web.servlet接口,它是由Spring容器进行管理,并不依赖Tomcat等容器,既可以应用在web程序中,也可以应用在非web程序中。
  • 触发时机不同:
    • 过滤器Filter是在请求进入Tomcat等容器后,servlet处理之前进行调用的。
    • 拦截器Interceptor是在请求进入servlet后,执行Controller之前进行调用的。
  • 拦截范围不同:
    • 过滤器Filter几乎可以拦截所有进入容器的请求。
    • 拦截器Interceptor只会对Controller请求或访问static目录下的静态资源请求起作用。
  • 初始化时机不同:
    • 过滤器Filter是随着Tomcat等web容器启动时而进行初始化。
    • 拦截器Interceptor时随着spring启动而进行初始化。
posted @   Locho  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示