当前位置: 首页 > news >正文

在Spring Boot实战中碰到的拦截器与过滤器是什么?

在Spring Boot实战中,拦截器(Interceptors)和过滤器(Filters)是两个常用的概念,它们用于在应用程序中实现一些通用的逻辑,如日志记录、权限验证、请求参数处理等。虽然它们都可以用于对请求进行处理,但在实现和使用上有一些不同之处。

过滤器(Filters)

过滤器是Servlet规范中定义的一种组件,用于拦截HTTP请求和响应。在Spring Boot应用中,你可以使用过滤器来实现对HTTP请求和响应的处理,无需依赖Spring框架。

作用:

  • 过滤器可以在请求到达目标资源之前进行预处理,也可以在响应返回给客户端之前进行后处理。
  • 主要用于对请求进行过滤、转换和修改,如添加请求头、修改请求参数、验证用户权限等。
  • 可以对请求进行统一的日志记录、字符编码处理等。

实现:

  • 实现javax.servlet.Filter接口或者继承javax.servlet.Filter类,并实现其doFilter方法来处理请求。
  • 在Spring Boot应用中,可以通过注解@WebFilter或者在配置类中注册Filter来注册过滤器,使其生效。

示例:

@Component
public class LoggingFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 在请求到达目标资源之前进行预处理HttpServletRequest httpRequest = (HttpServletRequest) request;System.out.println("Request URI: " + httpRequest.getRequestURI());// 执行下一个过滤器(如果有),或者调用目标资源chain.doFilter(request, response);// 在响应返回给客户端之前进行后处理System.out.println("Response Status: " + HttpServletResponse.SC_OK);}
}

拦截器(Interceptors)

拦截器是Spring框架提供的一种机制,用于在请求处理的各个阶段进行拦截和处理。与过滤器不同,拦截器是Spring MVC框架中的一部分,可以访问Spring MVC的上下文和功能。

作用:

  • 拦截器主要用于在请求处理的不同阶段执行一些通用逻辑,如权限验证、用户登录检查、国际化处理等。
  • 可以在请求处理前、请求处理后以及请求完成后执行一些操作。

实现:

  • 实现org.springframework.web.servlet.HandlerInterceptor接口,并实现其preHandle、postHandle和afterCompletion方法来处理请求。
  • 在Spring Boot应用中,通过配置类注册拦截器,并指定拦截的URL路径或者拦截的Controller类来启用拦截器。

示例:

@Component
public class AuthorizationInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 在请求处理前执行权限验证逻辑if (!checkAuthorization(request)) {response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return false;}return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// 在请求处理后执行操作}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,Exception ex) throws Exception {// 在请求完成后执行操作}private boolean checkAuthorization(HttpServletRequest request) {// 进行权限验证逻辑return true;}
}

区别与选择

在选择使用过滤器还是拦截器时,需要考虑以下几点:

  1. 功能需求:如果需要对请求进行全局的过滤、转换或修改,通常选择过滤器;如果需要在Spring MVC框架中实现一些通用的逻辑,如权限验证、日志记录等,通常选择拦截器。

  2. 使用范围:过滤器是Servlet规范中定义的,可以在任何Servlet容器中使用;而拦截器是Spring MVC框架提供的,只能在Spring MVC应用中使用。

  3. 访问上下文:过滤器无法访问Spring的上下文和功能,只能对HTTP请求进行处理;拦截器可以访问Spring MVC的上下文和功能,如控制器、模型等。

  4. 统一性:过滤器对所有请求都生效,而拦截器可以根据条件选择是否拦截某个请求。

综上所述,过滤器和拦截器在Spring Boot应用中都有各自的作用和用法,根据具体的需求和场景选择合适的方式来实现对请求的处理。

黑马程序员免费预约咨询

相关文章:

在Spring Boot实战中碰到的拦截器与过滤器是什么?

在Spring Boot实战中,拦截器(Interceptors)和过滤器(Filters)是两个常用的概念,它们用于在应用程序中实现一些通用的逻辑,如日志记录、权限验证、请求参数处理等。虽然它们都可以用于对请求进行…...

数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔

总结 本系列是数据可视化基础与应用的第04篇seaborn,是seaborn从入门到精通系列第3篇。本系列主要介绍基于seaborn实现数据可视化。 参考 参考:我分享了一个项目给你《seaborn篇人口普查分析–如何做人口年龄层结构金字塔》,快来看看吧 数据集地址 h…...

软考之【系统架构设计师】

系统架构设计师 根据原人事部、原信息产业部文件(国人部发[2003]39号)文件规定,计算机软件资格考试纳入全国专业技术人员职业资格证书制度的统一规划,实行统一大纲、统一试题、统一标准、统一证书的考试办法,每年举行…...

LigaAI x 极狐GitLab,共探 AI 时代研发提效新范式

近日,LigaAI 和极狐GitLab 宣布合作,双方将一起探索 AI 时代的研发效能新范式,提供 AI 赋能的一站式研发效能解决方案,让 AI 成为中国程序员和企业发展的新质生产力。 软件研发是一个涉及人员多、流程多、系统多的复杂工程&#…...

如何看待2023年图灵奖

目录 1.概述 2.计算复杂性理论 3.随机性和伪随机性 4.学术生涯和领导力 1.概述 图灵奖(Turing Award),全称A.M.图灵奖(ACM A.M Turing Award),是由计算机领域的最高学术机构——美国计算机协会&#xf…...

《云原生安全攻防》-- 云原生攻防矩阵

在本节课程中,我们将开始学习如何从攻击者的角度思考,一起探讨常见的容器和K8s攻击手法,包含以下两个主要内容: 云原生环境的攻击路径: 了解云原生环境的整体攻击流程。 云原生攻防矩阵: 云原生环境攻击路径的全景视图&#xff0…...

自然语言处理: 第二十七章LLM训练超参数

前言: LLM微调的超参大致有如下内容,在本文中,我们针对这些参数进行解释 training_arguments TrainingArguments(output_dir"./results",per_device_train_batch_size4,per_device_eval_batch_size4,gradient_accumulation_steps2,optim"adamw_8bi…...

Linux使用C语言实现Socket编程

Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: (电源)插座(电器上的)插口,插孔,管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…...

Swin Transformer——披着CNN外皮的transformer,解决多尺度序列长问题

题目:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》作为2021 ICCV最佳论文,屠榜了各大CV任务,性能优于DeiT、ViT和EfficientNet…...

数据结构排序算法

排序也称排序算法(SortAlgorithm),排序是将一组数据,依指定的顺序进行排列的过程。 分类 内部排序【使用内存】 指将需要处理的所有数据都加载到内部存储器中进行排序插入排序 直接插入排序希尔排序 选择排序 简单选择排序堆排序 交换排序 冒泡排序快速…...

【深度剖析】曾经让人无法理解的事件循环,前端学习路线

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞…...

Spring 事务失效总结

前言 在使用spring过程中事务是被经常用的,如果不小心或者认识不做,事务可能会失效。下面列举几条 业务代码没有被Spring 容器管理 看下面图片类没有Componet 或者Service 注解。 方法不是public的 Transactional 注解只能用户public上&#xff0c…...

K8S节点kubectl命令报错x509: certificate signed by unknown authority

K8S节点上执行kubectl get node命令报错证书问题,查看kubelet日志如下 [localhost10 ~]$ journalctl -xeu kubelet --since "2024-04-09" --no-pager 4月 09 00:06:22 10.10.44.23-v7-prod-cams-08 kubelet[2142]: I0409 00:06:22.150535 2142 csi_pl…...

【HTML】制作一个简单的实时字体时钟

目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML代码,具体内容如下: 开始 首先新建文件夹,创建一个文本文档,两个文件夹,其中HTML的文件名改为[index.html]&am…...

servlet的三个重要的类(httpServlet 、httpServletRequst、 httpServletResponse)

一、httpServlet 写一个servlet代码一般都是要继承httpServlet 这个类,然后重写里面的方法 但是它有一个特点,根据之前写的代码,我们发现好像没有写main方法也能正常执行。 原因是:这个代码不是直接运行的,而是放到…...

【软考】设计模式之命令模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 优缺点5.1 优点5.2 缺点 6. 适用性7.java示例 1. 说明 1.命令模式(Command Pattern)是一种数据驱动的设计模式。2.属于行为型模式。3.请求以命令的形式被封装在对象中,并传递给调用对象。4.调用对…...

波奇学Linux:ip协议

ip报头是c语言的结构体 报头和有效载荷如何分离? 固定长度四位首部长度 4位版本号就是IPV4 8位服务类型:4位TOS位段和位保留字段 4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本 给路由器提…...

Efficient Multimodal learning from data-centric perspective

[MLLM-小模型推荐-2024.3.18] Bunny 以数据的眼光看问题 - 知乎近期几天会梳理下多模态小模型相关的论文,做个汇总。为了能够每天更新点啥,先穿插一些小模型算法。等到全部算法都梳理完成后,再发布一篇最终汇总版本的。 3.15 号 BAAI 发布了 …...

ubuntu下交叉编译ffmpeg到目标架构为aarch架构的系统

Ubuntu下FFmpeg的aarch64-linux-gnu架构交叉编译教程 一、前言 有时候真的很想报警的,嵌入式算法部署花了好多时间了,RKNN 1808真是问题不少;甲方那边也是老是提新要求,真是受不了。 由于做目标检测,在C代码中有对视…...

【Linux C | 多线程编程】线程同步 | 条件变量(万字详解)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-04-15 0…...

深度解析跨平台音频驱动:FlexASIO实战配置指南

深度解析跨平台音频驱动:FlexASIO实战配置指南 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https://gitcode.com/gh_…...

像素时装锻造坊企业落地:游戏公司美术部门像素资产标准化生产流程再造

像素时装锻造坊企业落地:游戏公司美术部门像素资产标准化生产流程再造 1. 项目背景与价值 在游戏美术制作领域,像素艺术资产的生产一直面临效率瓶颈。传统手工绘制方式需要美术师逐帧绘制,耗时耗力且难以保持风格统一。像素时装锻造坊(Pixe…...

Android开发避坑指南:RecyclerView最后一行被截断的5种原因及对应解决方案

Android开发避坑指南:RecyclerView最后一行被截断的5种原因及对应解决方案 在Android应用开发中,RecyclerView作为列表展示的核心组件,其灵活性和高性能深受开发者喜爱。然而,在实际项目中,我们经常会遇到一个令人头疼…...

STM32与W25Q64:构建自定义上位机字库烧录系统的实践指南

1. 为什么需要自定义字库烧录系统 在嵌入式显示项目中,中文字库的处理一直是个头疼的问题。我去年接手一个工业HMI项目,客户要求设备能显示繁简体中文、日文和部分特殊符号。最初尝试用SD卡加载字库,结果现场有30%的设备因为SD卡接触不良导致…...

FineBI连接MySQL实战:手把手教你从零搭建第一个学生数据分析看板

FineBI连接MySQL实战:从零构建学生数据分析看板 当教务系统的学生信息沉睡在MySQL数据库中时,FineBI能像魔法师一样将它们唤醒为生动的可视化图表。我曾为某高校搭建第一个招生分析看板时,仅用三小时就让校领导看到了历年录取数据的立体画像—…...

Minimum Snap轨迹优化:从理论到实践的无人机巡检路径规划

1. 为什么无人机巡检需要Minimum Snap算法 去年给某电力公司做巡检方案时,他们的老飞手给我看了一段视频:无人机在高压线塔间穿行时,摄像头画面抖动得像在跳机械舞,关键部位的图像全是模糊的残影。这正是传统航点飞行模式的典型痛…...

ThinkPad 4G/5G 连网不支持 IPv6?一文教你判断与设置

很多用 ThinkPad 内置 4G/5G 模块上网的用户,在使用 IPv6 相关服务、测速或网络诊断时,会发现自己明明设备很新,却始终无法获取 IPv6 地址,甚至误以为电脑硬件不支持。尤其在办公、远程、云服务等场景,IPv6 支持与否直…...

java毕业设计基于springboot+vue的自贡恐龙博物馆门户系统

前言 该系统采用前后端分离 的架构模式,后端使用Spring Boot框架构建,前端则使用Vue.js等框架来构建友好的用户界面。这种架构模式使得开发团队可以独立进行前后端的开发与维护,从而提高开发效率。一、项目介绍 开发语言:Java 框架…...

突破Steam依赖:SteamEmulator让局域网游戏自由联机的实现与价值

突破Steam依赖:SteamEmulator让局域网游戏自由联机的实现与价值 【免费下载链接】SteamEmulator MIRROR REPO - Credits : Mr. Goldberg. Steam emulator that emulates Steam online features. Lets you play games that use the Steam multiplayer APIs on a LAN …...

交互式社会工程学攻击的演进与防御:基于2025年语音钓鱼激增现象的深度分析

摘要 随着人工智能生成内容(AIGC)技术的成熟与普及,网络攻击的初始访问向量正经历从自动化、非交互式向高度个性化、实时交互式的范式转变。本文基于Google Cloud Mandiant发布的《M-Trends 2026》报告数据,深入剖析了2025年语音钓…...