SpringBoot拦截器

news2024/11/24 2:55:57

一、SpringBoot拦截器介绍

Spring Boot中的拦截器是一种用于在处理请求之前或之后执行特定操作的组件。拦截器通常用于实现对请求进行预处理、日志记录、权限验证等功能。

在Spring Boot中,可以使用HandlerInterceptor接口来定义自己的拦截器,并通过配置进行注册和使用。以下是使用拦截器的基本步骤:

  1. 创建一个实现了HandlerInterceptor接口的拦截器类,实现其中的方法,例如preHandle用于在请求处理之前执行操作,postHandle用于在请求处理之后执行操作,afterCompletion用于在视图渲染之后执行操作。
  2. 在Spring Boot的配置类中,通过继承WebMvcConfigurerAdapter并重写addInterceptors方法来注册拦截器。
  3. addInterceptors方法中,使用registry.addInterceptor()来添加拦截器,并通过addPathPatterns指定要拦截的路径模式,也可以使用excludePathPatterns排除某些路径。
  4. 运行应用程序后,拦截器将根据配置的路径模式拦截相应的请求,并执行定义的操作。

二、用途

日志记录:拦截器可以在请求到达控制器之前或之后记录请求信息,如请求URL、请求参数、处理时间等,用于日志记录和统计。

权限验证:拦截器可以对用户的访问进行权限验证,比如判断用户是否登录、是否具有操作权限等。如果权限验证失败,拦截器可以返回相应的错误信息或重定向到登录页面。

请求参数处理:拦截器可以对请求参数进行预处理,如对参数进行校验、转换、加密等操作。这样可以减轻控制器的负担,使请求处理更加高效。

缓存管理:拦截器可以根据请求的路径或参数判断是否需要从缓存中获取数据,从而提高系统性能。

统一异常处理:拦截器可以拦截控制器方法的执行结果,对异常进行统一处理,如返回自定义的错误信息、记录错误日志等。

三、代码示例:

在 Spring Boot 项目中,使用拦截器功能通常需要以下 2 步:

  1. 创建拦截器;
  2. 配置拦截器,指定拦截规则(如果是拦截所有,静态资源也会被拦截)

1. 创建拦截器类:Interceptor

@Component
public class Interceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("进入拦截器了");
        //中间写逻辑代码,比如判断是否登录成功,失败则返回false
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        //
        System.out.println("controller 执行完了");
    }


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("我获取到了一个返回的结果:"+response);
        System.out.println("请求结束了");
    }
}

2、拦截器注入适配器:InterceptorWebConfig

@Configuration
public class InterceptorWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new Interceptor())
                .addPathPatterns("/**");//拦截所有
//                .excludePathPatterns("/ayo/hhy1");
    }
}

·····
代码解释说明:

  1. 通过实现WebMvcConfigurer接口可以自定义一个适配器,也可以通过继承WebMvcConfigurerAdapter来定义适配器,建议使用第一种,第二种已经是过时的方法了。
  2. 重写addInterceptors方法,addInterceptor方法是将拦截器注入到适配器中。
    3. addPathPatterns方法是设置一个需要拦截的路径,可以是多个字符串或者是直接传入一个数组。
    4. excludePathPatterns是配置不需要拦截的路径。
  3. 需要加上configuration注解说明这是一个配置类,在项目启动的时候自动执行。

执行结果:
在这里插入图片描述

拦截器与过滤器的区别

归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
拦截器内容不同:Filter对所有访问进行增强(在Tomcat服务器进行配置),Interceptor仅针对SpringMVC的访问进行增强

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流水灯实现

文章目录 一、流水灯二、代码实现三、引脚分配 一、流水灯 流水灯指的是LED像水流一样点亮,即LED依次点亮但不立刻熄灭,等到4个LED都点亮后,再把所有灯一次性熄灭。 二、代码实现 module horse_led(input wire clk,input wire rst_n,output…

记录管理系统

简单的记录管理系统,适用于保存表格数据,可以用来替代Excel软件保存数据,提供可视化拖动组件用于自定义数据列,数据存到数据库,相比于Excel,更易保存,易搜索。 例如创建合同记录数据&#xff0…

【电子学会】2023年05月图形化四级 -- 计算圆的面积和周长

计算圆的面积和周长 编写程序计算圆的面积和周长。输入圆的半径,程序计算出圆的面积和周长,圆的面积等于3.14*半径*半径;圆的周长等于2*3.14*半径。 1. 准备工作 (1)保留舞台中的小猫角色和白色背景; 2…

MySQL数据表高级操作

一、克隆/复制数据表二、清空表,删除表内的所有数据删除小结 三、创建临时表四、MySQL中6种常见的约束1、外键的定义2、创建外键约束作用3、创建主表test44、创建从表test55、为主表test4添加一个主键约束。主键名建议以"PK_”开头。6、为从表test5表添加外键&…

Html利用Canvas绘制图形

今天接到粉丝私信,询问是否可以通过Canvas绘制一些图形,然后根据粉丝提供的模板图,通过Canvas进行模拟绘制,通过分析发现,图形虽然相对简单,但是如果不借助相应的软件,纯代码绘制还是稍微费些时…

机器学习:self supervised learning- Recent Advances in pre-trained language models

背景 Autoregressive Langeuage Models 不完整的句子,预测剩下的空的词语 sentence completion Transformer-based ALMs Masked language models-MLMs 预训练模型能将输入文本转成hidden feature representation 模型参数最开始是从预训练模型中拿到&#xf…

如何快速制作一个奶茶店小程序商城

如果你是一个奶茶店的老板,你可能会考虑开设一个小程序商城来增加销售渠道和提升品牌形象。那么,如何快速制作一个奶茶店小程序商城呢?下面我们将介绍一个简单的步骤供你参考。 首先,你需要登录乔拓云平台进入商城后台管理页面。在…

数据结构真题

数据结构真题 1. A. Bills of Paradise 线段树并查集四个操作: D x。标记大于等于 x 的第一个未标记的 a i a_i ai​;若没有,则不操作.F x。查询大于等于 x 的第一个未标记的 a i a_i ai​;若没有,则输出 1 0 12…

《UNUX环境高级编程》(9)进程关系

1、前言 2、终端登录 在早期的UNIX系统,用户用哑终端(用硬连接到主机)进行登录,因为连接到主机上的终端设备数是固定的,所以同时登录数也就有了已知的上限。 随着位映射图像终端的出现,开发出了窗口系统&…

数学分析:对偶映射

这个其实就是我们一致讨论的对偶映射,换了个马甲,差点认不出来了。本来是V->R 要变成U->R,就需要一个反向的V*->U*的映射。 注意这个式子,t属于U,phit转到了V,但是坐标也发生了变化,这…

2023西南赛区ciscn -- do you like read

Attack 打开后一个商城页面 在login as admin那里有个登录页面,账号admin,密码爆破即可得到admin123 也可以在book.php?bookisbn1进行sql注入得到密码,这里发现是没有注入waf的 登录进来是一个Book List的管理页面,同时在审计源…

【C语言】初阶指针(详细版)

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

RSA原理

RSA的历史 RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德李维斯特(Ron Rivest)、阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)在1977年一…

本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT

OpenAI公司基于GPT模型的ChatGPT风光无两,眼看它起朱楼,眼看它宴宾客,FaceBook终于坐不住了,发布了同样基于LLM的人工智能大语言模型LLaMA,号称包含70亿、130亿、330亿和650亿这4种参数规模的模型,参数是指…

Lightening Network for Low-Light Image Enhancement 论文阅读笔记

这是2022年TIP期刊的一篇有监督暗图增强的文章 网络结构如图所示: LBP的网络结构如下: 有点绕,其基于的理论如下。就是说,普通的暗图增强就只是走下图的L1红箭头,从暗图估计一个亮图。但是其实这个亮图和真实的亮图…

54 # 可写流基本用法

内部也是基于 events 模块,fs.open、fs.write,如果文件不存在就会创建文件,默认会清空文件并写入 注意点:可写流的 highWaterMark 表示预期占用的内存(达到或者超过预期后返回的值就是false),默…

确认应答机制与超时重发机制【TCP原理(笔记一)】

文章目录 通过序列号与确认应答提高可靠性正常的数据传输数据包丢失的情况确认应答丢失的情况发送的数据 重发超时如何确定 通过序列号与确认应答提高可靠性 在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做…

TCP的三次握手以及以段为单位发送数据【TCP原理(笔记二)】

文章目录 连接管理TCP以段为单位发送数据 连接管理 TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。 UDP是一种面向无连接的通信协议,因此不检查对端是否可以通信,直接将UDP包发送出去。TCP与此相反&am…

2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用?

2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用? 答案2023-07-16: 什么是零拷贝? 零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输…

layui的基本使用-Helloworld 三把斧的一把斧头的熟练起来

该笔记记录如何使用layui的模块化方法。 访问layui官网 Layui - 极简模块化前端 UI 组件库下载官网的layui压缩包文件,解压到本地文件夹,文件结构如下: vscode创建项目; 位置 测试写了三个文件夹,才测试出来bug 坑所在…