Filter和Inteceptor的区别

2025年03月01日 · 494

最近在处理Spring Security的工作, 一个请求经过那么多过滤器和拦截器,到底有什么先后顺序又有什么关系呢?

在Java体系中,所有的http请求最后都经过servlet处理。就像我们一开始学习servlet的时候,编码我们需要自己在一个filter中处理,文件的上传和下载需要我们自己通过servlet api获取字节流处理,等等一系列麻烦又繁多的工作,后来Spring MVC出现了,解决了这一问题。

Spring MVC本质上也是一个servlet,就是DispatcherServlet ,DispatcherServlet处理了业务请求,然后又通过DispatcherServlet返回,就像我们自己自定义一个servlet那样,只不过在处理servlet的过程中要复杂的多。

http -> filter -> servlet -> interceptor -> controller

FilterInterceptor 是 Java Web 开发中常用的两种拦截机制,虽然它们都可以用来实现类似的功能,比如请求拦截、权限校验、日志记录等,但它们的作用范围、使用方式、生命周期等方面都有明显区别。

🧩一、Filter(过滤器)

javax.servlet.Filter属于Servlet 规范中的组件,属于 Java EE 标准。使用在 Servlet 容器(如 Tomcat)级别。拦截 HTTP 请求和响应,在进入 Servlet 之前和响应返回客户端之前处理。


🧩 二、Interceptor(拦截器)

HandlerInterceptor是Spring MVC 提供的功能,属于 Spring 框架层面。拦截 Controller 方法的调用

特性Filter(过滤器)Interceptor(拦截器)
所属体系Servlet 规范Spring MVC 框架
作用范围所有请求,包括静态资源仅拦截控制器请求(不包括静态资源)
执行顺序在 DispatcherServlet 之前执行在 DispatcherServlet 之后执行
配置方式web.xml 或注解Java Config (WebMvcConfigurer)
拦截粒度请求级别(request/response)方法级别(Handler)
常用场景编码、日志、权限、XSS登录、权限、日志、限流