SpringBoot 的拦截器和过滤器的区别和使用场景

article/2025/10/7 17:02:59

Servlet

现在我们通常做 Java Web 开发都会用 SpringBoot ,但要知道 SpringBoot 只是用来简化开发的,在此之前,Springframework 只是一个粘合剂框架,用来整合各种 Java Web 技术的,SpringMvc 都是出现的比较晚的技术,更早之前是 Struts2、Struts1。

那更早之前呢?就是基于原始的 Servlet/JSP 。

javax.servletjaavx.servlet.http 包提供了一些接口和类,实现了 Servlet 规范。 javax.servlet 包中的 Servlet 声明了一些重要方法,如 init(), service(), desctroy() 等,这些也都是 servlet 的生命周期方法.

我们还知道,Servlet 是运行于 Servlet 容器中的。容器可以处理网络连接,解析 HTTP 请求等。Tomcat 就是最负盛名的一个容器。

虽然现在大家都用 Spring 全家桶做开发,但必须要知道 SpringWvc 的核心还是一个 DispatcherServlet,其本质也就是一个 Servlet.

过滤器 Filter

过滤器是被容器执行的类。请求在进入容器时、响应在离开容器时,会经过一个个的过滤器。过滤器的实例,在容器中是以过滤器链的形式执行的。

如果在应用中,我们定义了多个过滤器,那么执行的先后顺序,可以通过 @Order 注解来指定。

Filter 接口的核心方法,也是其生命周期方法:

  • init(FilterConfig config) - 此方法只调用一次,用于初始化过滤器
  • doFilter(HttpServletRequest request, HttpServletResponse response, FilterChian chian) - 此方法在每一个请求打到映射的资源上时都会调用,比如定义一个 Filter 拦截 /path/* ,那么每一个匹配 /path/* 访问资源的请求进来时,都会执行此方法。这个方法中就是拦截器的具体逻辑
  • destroy() - 此方法也只执行一次,用于销毁过滤器

Servlet Invocation with and without Filters (docs.oracle.com)

拦截器 Interceptor

Spring 拦截器类似于 Servlet 过滤器。拦截器允许自定义预处理(Pre-Processing),在其中可以选择禁止对应 Handler 的执行;也允许自定义后处理(Post-Precessing);在拦截器中可以访问 Spring Context 上下文。

HandlerInterceptor 的核心方法:

  • preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) - 该方法在请求到达 Controller 之前执行操作,返回一个布尔值。当返回 false 时,不再执行对应的 handler
  • postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) - 该方法在响应返回客户端之前执行
  • afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) - 该方法在请求和响应流程完成之后执行

HandlerInterceptor: 它的实例在 DispatcherServlet(javax.servlet.Servlet 的实例) 中作为请求处理的一部分来执行。

注意,现在实现 Spring 拦截器,只需要实现 HandlerInterceptor 接口即可,更早之前,接口的方法不能有默认实现时,是需要继承 HandlerInteceptorAdapter 这个抽象类的,现在这个类已经可以废弃了。

通过下面一张图看看过滤器和拦截器的位置:

Filters and HandlerInterceptors

Filters vs HandlerInterceptors

  • Filter 是 Servlet 规范中的,而 HandlerInterceptor 是 Spring 中的一个概念
  • 拦截器位置相对于过滤器更靠后
  • 精细的预处理任务适用于拦截器,如授权检查等
  • 内容处理相关或通用的流程,非常适合用过滤器;如上传表单、zip 压缩、图像处理、日志记录请求、身份验证等
  • HandlerInterceptorpostHandle 方法允许我们向视图添加更多模型对象,但不能更改 HttpServletResponse,因为它已经被提交了
  • 过滤器的 doFilter 方法比拦截器的 postHandle 更通用。我们可以在过滤器中改变请求或响应,并将其传递给链,甚至阻止请求的处理
  • HandlerInterceptor 提供了比过滤器更精细的控制,因为我们可以访问实际的目标 handler,甚至可以检查 handler 方法是否有某个特定的注解

http://chatgpt.dhexx.cn/article/TiSNAQvx.shtml

相关文章

拦截器和过滤器的区别是什么

过滤器 过滤器Filter是基于Servlet实现。Servlet的工作原理是拦截配置好的客户端请求,然后对Request和Response进行处理。Filter过滤器随着web应用的启动而启动,只初始化一次。 过滤器的配置比较简单,直接实现Filter 接口就可以了&#xff…

Spring拦截器和过滤器的区别

本文来说下Spring拦截器和过滤器的区别 文章目录 概述拦截器和过滤器介绍过滤器 (Filter)拦截器 (Interceptor)主要区别 拦截器和过滤器的区别实现原理不同使用范围不同触发时机不同拦截的请求范围不同注入Bean情况不同控制执行顺序不同 本文小结 概述 拦截器和过滤器 filter和…

springboot拦截器和过滤器的区别与使用

拦截器与过滤器的区别 spring的拦截器与servlet的filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等,不同的是: 适用范围不同:filter是servlet规范规定的,只能用于web程序中…

Springboot--拦截器、过滤器 区别,作用,实现方法

Springboot–拦截器、过滤器 拦截器和过滤器的区别 拦截器不依赖于servlet容器,这是springMVC自带的,过滤器依赖于servlet容器拦截器是基于java的反射机制,过滤器是基于函数的回调拦截器只能对action请求起作用,而过滤器可以对几…

Spring Boot拦截器与过滤器的区别

Spring Boot拦截器与过滤器的区别 在使用Spring Boot开发Web应用程序时,您可能需要在处理请求之前或之后执行某些操作。这些操作可以包括身份验证、日志记录、性能监测等。在这种情况下,您可以使用两种不同的机制:拦截器和过滤器。本文将介绍…

Springboot过滤器和拦截器的区别

上两篇文章我们介绍了过滤器Filter和拦截器Intercepter,其功能都是对请求进行拦截并对请求过滤,本篇文章就介绍一下两者的区别 1. 过滤器和拦截器的区别 过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入serv…

关于拦截器与过滤器使用场景、拦截器与过滤器的区别整理

拦截器与过滤器的区别总结&#xff1a; 过滤器在web.xml中配置&#xff1a; &#xff08;1&#xff09;因为一开始在过滤器中映射的url-pattern填写路径是*.action。所有的action要经过它的过滤。<url-pattern>*.action</url-pattern> &#xff08;2&#xff09;…

彻底搞清拦截器和过滤器的区别

一、引言 本来想记录一下关于用户登陆和登陆之后的权限管理、菜单管理的问题&#xff0c;想到解决这个问题用到Interceptor&#xff0c;但想到了Interceptor&#xff0c;就想到了Filter&#xff0c;于是就想说一下它们的执行顺序和区别。关于Interceptor解决权限和菜单管理的问…

Spring拦截器和过滤器的区别及详解

拦截器和filter的功能都是拦截&#xff0c;filter是在servlet前执行的&#xff0c;拦截器拦截的是Spring MVC定义的概念。过滤器中包含拦截器&#xff0c;发送一个请求&#xff0c;先进行过滤器处理&#xff0c;看程序是否受理该请求。过滤器放过后&#xff0c;程序中的拦截器再…

拦截器与过滤器的区别

文章目录 一、二者理解过滤器&#xff08;Filter&#xff09;拦截器&#xff08;Interceptor&#xff09; 二、拦截器与过滤器的区别区别&#xff1a; 三、拦截器与过滤器的触发时机拦截器与过滤器触发时机不一样 四、使用场景五、图解 一、二者理解 过滤器&#xff08;Filter…

拦截器和过滤器的区别

1、实现原理不同 过滤器和拦截器底层实现方式大不相同&#xff0c;过滤器 是基于函数回调的&#xff0c;拦截器 则是基于Java的反射机制&#xff08;动态代理&#xff09;实现的。 2、使用范围不同 我们看到过滤器 实现的是 javax.servlet.Filter 接口&#xff0c;而这个接口是…

过滤器 和 拦截器的 6个区别,别再傻傻分不清了

周末有个小伙伴加我微信&#xff0c;向我请教了一个问题&#xff1a;老哥&#xff0c;过滤器 (Filter) 和 拦截器 (Interceptor) 有啥区别啊&#xff1f; 听到题目我的第一感觉就是&#xff1a;简单&#xff01; 毕竟这两种工具开发中用到的频率都相当高&#xff0c;应用起来也…

过滤器和拦截器的区别

文章目录 一、拦截器和过滤器的区别1、过滤器1、实现方式2、应用场景 2、拦截器1、实现方式2、应用场景 总结 一、拦截器和过滤器的区别 1、过滤器和拦截器触发时机不一样&#xff0c;过滤器是在请求进入容器后&#xff0c;但请求进入servlet之前进行预处理的。请求结束返回也…

过滤器和拦截器有什么区别?

过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;都是基于 AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;思想实现的&#xff0c;用来解决项目中某一类问题的两种“工具”&#xff0c;但二者有着明显的差…

面试篇-Spring 拦截器和过滤器的区别?

1、实现原理不同 过滤器和拦截器 底层实现方式大不相同&#xff0c;过滤器 是基于函数回调的&#xff0c;拦截器 则是基于Java的反射机制&#xff08;动态代理&#xff09;实现的。 2、使用范围不同 我们看到过滤器 实现的是 javax.servlet.Filter 接口&#xff0c;而这个接…

Nessus在线更新教程

前言&#xff1a;在线更新Nessus需要科学上网&#xff0c;没有工具无法更新。 1. 设置更新策略 这里选&#xff1a;更新所有的组件、频率选&#xff1a;每天&#xff0c;就可以 2. 检查是否有更新 3. 打开梯子&#xff0c;将梯子设置为全局模式 4. cmd命令行&#xff0c;进…

弱点扫描工具NESSUS详细教程

NESSUS • 家庭版 • 免费 • 专业版 • 收费、无限的并发连接 • 下载 • http://www.tenable.com/products/nessus/select-your-operating-system • 安装 • dpkg -i • 安装路径:/opt/nessus • 启动服务 • systemctl start nessusd.service • 管理地址 • https://12…

NESSUS使用笔记

Nessus 使用记录 启动nessus服务Nessus更新插件教程win10升级&#xff08;破解&#xff09;方法kali 进行升级(初始化完成后之后发现还是无法破解成功&#xff0c;看来kali系统无法使用这种方式进行破解了) 启动nessus服务 进入kali系统&#xff0c;终端输入如下命令&#xff…

Nessus学习

攻击主机&#xff1a; Kali 192.168.11.106 靶机&#xff1a;windows server 2008 r2 192.168.11.134 x64 32位 nessus 实验原理&#xff1a; 利用漏洞扫描器能够自动应用漏洞扫描原理&#xff0c;对目标主机安全漏洞进行检测&#xff0c;附带识别主机漏洞的特征库的功能&…

Nessus安全测试工具使用教程

Nessus安全测试工具使用教程 1.创建 New Scan扫描按钮 2.选择扫描策略 3.创建扫描成功 4.扫描结果