过滤器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启动而进行初始化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)