SpringMVC中拦截器和过滤器的区别

发布时间 2023-08-23 15:57:51作者: rockdow

首先,过滤器(Filter)是Servlet规范中的一部分,任何Java Web工程都可以使用,而拦截器(Interceptor)则是使用了SpringMVC框架的工程才可以使用。

接着,过滤器只在容器初始化的时候过滤一次,而拦截器可以多次拦截对Controller层的请求。

最后是执行顺序:

在一个典型的 Java Web 应用中,DispatchServlet、过滤器和拦截器之间的执行顺序如下:

  1. 过滤器(Filters): 过滤器在请求到达 DispatchServlet 之前或之后(晚于拦截器的afterCompletion)执行,可以用于预处理请求、修改请求参数、验证用户身份等操作。过滤器的执行顺序按照配置的顺序执行。也就是说,如果有多个过滤器,它们会按照在 web.xml 配置中的顺序依次执行。

  2. DispatchServlet: 一旦请求通过过滤器处理,它会到达 DispatchServlet,它是 Spring MVC 框架的前端控制器,负责整个请求-处理-响应的流程。DispatchServlet 根据请求的 URL 或其他条件将请求分发给适当的控制器进行处理。

  3. 拦截器(Interceptors): 拦截器在请求进入控制器之前(preHandle)、离开控制器之后(postHandle)和视图解析之后(afterCompletion)执行。它可以用于在处理器执行前后执行一些预处理或后处理操作,如身份验证、日志记录、性能监控等。拦截器是 Spring MVC 框架中的一部分,与控制器直接相关,可以在配置中定义多个拦截器,并按照配置的顺序执行。

综上所述,执行顺序是:

  1. 过滤器按照配置顺序执行。
  2. 请求到达 DispatchServlet 进行请求分发和处理。
  3. 控制器执行前后,拦截器按照配置顺序执行。

需要注意的是,这个执行顺序可以根据具体的配置和框架版本有所不同,但一般来说遵循上述的基本流程。