Spring过滤器和拦截器区别?

embedded/2025/2/12 21:21:35/

在Spring框架中,过滤器和拦截器都用于在请求处理前后执行特定操作,但它们的作用范围和实现方式有所不同。

1. 过滤器(Filter)

过滤器是Servlet规范的一部分,主要用于在请求到达Servlet之前或响应发送给客户端之前进行预处理或后处理。过滤器可以操作请求和响应的内容、头信息等。

特点:
  • 作用范围:过滤器作用于Servlet容器级别,适用于所有进入容器的请求

  • 实现方式:通过实现javax.servlet.Filter接口,在web.xml中进行配置或者使用@WebFilter注解进行声明。

  • 执行顺序:过滤器的执行顺序由web.xml中的配置顺序决定,或通过@Order注解指定。

示例:
java">import javax.servlet.*;
import java.io.IOException;@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器初始化");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("过滤器开始处理请求");chain.doFilter(request, response); // 放行System.out.println("过滤器开始处理响应");}@Overridepublic void destroy() {System.out.println("过滤器销毁");}
}

2. 拦截器(Interceptor)

拦截器是Spring MVC框架的一部分,主要用于在控制器方法执行前后或视图渲染前后进行拦截处理。拦截器通常用于处理与业务逻辑相关的操作。

特点:
  • 作用范围拦截器作用于Spring MVC的DispatcherServlet级别,适用于Spring MVC处理的请求。

  • 实现方式:通过实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类。

  • 执行顺序:拦截器的执行顺序由Spring配置决定,可以通过Order注解或配置顺序指定。

示例:
java">import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("拦截器处理请求");// 假设这里进行权限验证return true; // 放行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("拦截器处理请求后数据");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("拦截器处理响应后");}
}

在Spring配置中注册拦截器:

java">import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**");}
}

区别总结:

  1. 作用范围

    • 过滤器作用于Servlet容器级别,适用于所有请求。

    • 拦截器作用于Spring MVC级别,仅适用于Spring MVC处理的请求。

  2. 实现方式

    • 过滤器通过实现javax.servlet.Filter接口。

    • 拦截器通过实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类。

  3. 执行时机

    • 过滤器在请求进入Servlet之前和响应发送给客户端之前执行。

    • 拦截器在控制器方法执行前后和视图渲染前后执行。

  4. 配置方式

    • 过滤器通常在web.xml中配置。

    • 拦截器通常在Spring配置类中通过InterceptorRegistry注册。

适用场景:

  • 过滤器:适用于需要对所有请求进行统一处理的场景,如字符编码设置、请求日志记录、权限验证等。

  • 拦截器:适用于需要对Spring MVC处理的请求进行特定业务逻辑处理的场景,如用户认证、日志记录、性能监控等。

通过合理使用过滤器和拦截器,可以在不同层次上实现对请求和响应的处理,提升应用的灵活性和可维护性。


http://www.ppmy.cn/embedded/161695.html

相关文章

深度学习框架PyTorch

一、框架概览 深度学习框架:是一个针对深度学习的科学计算库,在深度学习领域,以下是当前市场上几个主流的深度学习框架: TensorFlow 上一代框架:起始于静态图时代,为早期深度学习的发展做出了巨大贡献。特…

Vite 代理下的 POST 请求跨域问题排查与解决方案

📌 问题描述 在 Vite 开发环境中,我遇到了一个奇怪的现象: GET 请求可以成功返回数据POST 请求却返回 403 Forbidden: Invalid CORS request但如果我手动使用 fetch 直接请求服务器 API,POST 请求可以成功 我的 Vite 代理配置如…

AI大模型随机初始化权重并打印网络结构方法(以Deepseekv3为例,单机可跑)

背景 当前大模型的权重加载和调用,主要是通过在HuggingFace官网下载并使用transformer的库来加以实现;其中大模型的权重文件较大(部分>100GB),若只是快速研究网络结构和数据流变化,则无需下载权重。本文…

【开源项目】数字孪生武汉~超经典智慧城市CIM/BIM数字孪生可视化项目——开源工程及源码

飞渡科技数字孪生武汉CIM管理平台,基于自研数字孪生引擎,结合数字孪生、物联网IOT、云计算等信息技术,以城市数据资源融合共享为主线,打造感知、联结、计算、运用“四位一体”的城市大脑,赋能经济社会高质量可持续发展…

亚马逊数据采集API教程:如何使用Pangolin Scrape API高效获取Amazon商品数据

为什么需要专业的Amazon Scrape API? 亚马逊是全球最大的电子商务平台之一,商家和数据分析师需要实时获取商品数据以优化业务决策。然而,由于亚马逊的严格反爬机制,传统的爬虫方法面临诸多挑战: 反爬机制复杂&#xff…

荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测

目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测: 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…

【开源免费】基于SpringBoot+Vue.JS社区养老服务平台(JAVA毕业设计)

本文项目编号 T 190 ,文末自助获取源码 \color{red}{T190,文末自助获取源码} T190,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

ffmpeg -formats

1. ffmpeg -formats -loglevel quiet 显示ffmpeg支持的格式 2. 输出 选取部分输出结果 File formats: D. Demuxing supported .E Muxing supported -- D aac raw ADTS AAC (Advanced Audio Coding) E mov QuickTime / MOV D mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV…