spring boot 拦截器例子

在Spring Boot中,拦截器是通过实现`HandlerInterceptor`接口来实现的。它允许你在请求到达控制器方法之前和之后执行自定义的逻辑。下面我将为你提供一个简单的Spring Boot拦截器的例子。

假设我们有一个简单的控制器类`UserController`,其中有两个请求处理方法:`getUser`和`saveUser`,我们希望在每次请求这两个方法前后记录日志。

1. 创建一个拦截器类 `LoggingInterceptor` 实现 `HandlerInterceptor` 接口:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;public class LoggingInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("Before handling request. URL: " + request.getRequestURL());return true; // Returning true allows the request to continue to the controller method. Returning false will stop the request.}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("After handling request. URL: " + request.getRequestURL());}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// This method is called after the view rendering is complete.// It can be used for resource cleanup tasks.}
}

2. 在Spring Boot中注册拦截器,创建一个配置类`InterceptorConfig`:

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 InterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoggingInterceptor());}
}

3. 创建一个简单的`UserController`:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@GetMapping("/user")public String getUser(@RequestParam("id") String userId) {System.out.println("Getting user: " + userId);return "User: " + userId;}@PostMapping("/user")public String saveUser(@RequestParam("name") String username) {System.out.println("Saving user: " + username);return "Saved user: " + username;}
}

4. 运行Spring Boot应用,然后通过浏览器或者API请求测试:

当访问`http://localhost:8080/user?id=123`时,控制台输出:


Before handling request. URL: http://localhost:8080/user?id=123
Getting user: 123
After handling request. URL: http://localhost:8080/user?id=123
 

当通过POST请求`http://localhost:8080/user`,参数为`name=John Doe`时,控制台输出:


Before handling request. URL: http://localhost:8080/user
Saving user: John Doe
After handling request. URL: http://localhost:8080/user
 

以上就是一个简单的Spring Boot拦截器的例子,它会在请求到达控制器方法前后记录日志。实际应用中,你可以根据需要在拦截器中添加更多的逻辑,比如权限验证、异常处理等。

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

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

相关文章

Linux第一个小程序-进度条(缓冲区概念)

1.\r和\n C语言中有很多字符 a.可显字符 b.控制字符 对于回车其实有两个动作,首先换行,在将光标指向最左侧 \r :回车 \n:换行 下面举个例子: 把\n去掉会怎样 什么都没输出。为什么? 2.缓冲区概念 观察下两个…

微信小程序性能优化

一、提高小程序速度 优化小程序的速度是最基本的需求之一,因为流畅的使用体验对于用户来说非常重要。可以采取以下措施来提高小程序的速度: 压缩代码 编写高效的代码是提高小程序速度的关键之一,开发者可以使用一些工具来对代码进行压缩&…

网工内推 | 网络安全工程师,最高15K,有高温补贴

01 超圣信华 招聘岗位:网络安全工程师 职责描述: 1. 负责网络安全产品的售前沟通交流、现状调研、方案设计、产品测试、产品选型和招投标等工作。 2. 负责网络安全集成项目的实施管理、项目交付文档编制以及项目验收等工作。 3. 负责网络安全产品的售后…

Vue中对对象内容调用的Demo

目录 1.对象作为数据: 2.对象数组 在Vue中,你可以通过对象的键来调用对象中的各个部分的内容。下面是一些使用Vue调用对象各部分内容的示例: 1.对象作为数据: 如果你在Vue实例的数据中有一个对象,你可以使用点语法来…

C#中i++和++i的底层原理

一:前言 我们都知道,i是先取值,后计算。i是先计算,后取值。下面说下它的底层原理 运算符优先级与运算顺序: 运算符的优先级只是影响了表达式中的结合顺序,不会影响运算顺序,运算顺序永远都是从…

在云服务器上,clone github时报Connection timed outexit code: 128

文章目录 问题解决方案 问题 在执行pip install安装依赖时,需要clone github代码,此时报了Connection timed out&exit code: 128错误,原因是访问超时了,此时需要使用代理 fatal: unable to access https://github.com/hugg…

【MATLAB第62期】基于MATLAB的PSO-NN、BBO-NN、前馈神经网络NN回归预测对比

【MATLAB第62期】基于MATLAB的PSO-NN、BBO-NN、前馈神经网络NN回归预测对比 一、数据设置 1、7输入1输出 2、103行样本 3、80个训练样本,23个测试样本 二、效果展示 NN训练集数据的R2为:0.73013 NN测试集数据的R2为:0.23848 NN训练集数据的…

Python tqdm的两种用法【教程】

Python tqdm的两种用法 本文记录一下在学习深度强化学习过程中遇到tqdm库显示进度条的用法,以供大家交流。 注意本文使用的tqdm均是使用的tqdm库中的同名tqdm方法,应该按照如下方式导入 from tqdm import tqdmCatologue Python tqdm的两种用法1. 基于可…

在Spring Boot框架中使用拦截器实现URL限制

限制URL列表的JSON格式可以根据您的需求进行定义。以下是一个示例: { "restrictions": [ { "url": "/api/endpoint1", "params": { "param1": "value1", "param2": "value2" } },…

RUST 有哪些整型?

在Rust中,有以下几种整型数据类型: i8 :有符号8位整型,取值范围为-128到127。u8 :无符号8位整型,取值范围为0到255。i16 :有符号16位整型,取值范围为-32768到32767。u16 &#xff1…

CUDA并行编程

并行编程 参考 1. pthread 求素数 // PrimesThreads.c // PrimesThreads.c// threads-based program to find the number of primes between 2 and n; // uses the Sieve of Eratosthenes, deleting all multiples of 2, all // multiples of 3, all multiples of 5, etc./…

淘宝开放平台API接口用法介绍

淘宝是中国最大的电子商务平台之一,其开放平台API接口为开发者提供了强大的数据支持。在本篇文章中,我们将从多个方面对淘宝开放平台API接口进行详细阐述。 一、API概述 淘宝开放平台提供了丰富的API接口,涵盖了商品、店铺、交易、物流、用…

使用Update修改不报错但是修改不成功

使用Update修改不报错但是修改不成功 sql执行后 后台日志说影响行数为0。然后发现是id不存在。 因为项目中使用自动生成ID,使用的是雪花算法,长度超过了前端js可处理长度,所以当后台id传到前台后会丢失精度,导致无法匹配到要修改…

解决Mysql报错2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)

1.找到mysql文件夹,将my,ini文件放入bin文件夹 2.管理员模式打开cmd 3.输入netstat -ano查看端口占用情况,这里我已经开启mysql应用,所以会有3306,如果没有开启是不会有的 4.输入sc delete mysql,删除mysql服务 5.将…

接口自动化报告,生成本地服务并自动打开时失败

错误原因: 端口号被占用 首先可以在cmd中调出命令窗口然后执行命令netstat -ano就可以查看所有活动的链接,找到被占用的端口号 1、通过命令taskkill /f /t /im "进程名称" ,根据进程的名称杀掉所有的进程。或者taskkill /f /t /p…

嵌入式开发的学习内容和技能包括:

. 熟悉C语言编程 掌握基础电子知识,如数字电路、模拟电路和单片机 .熟练掌握嵌入式操作系统的原理、内核架构和应用,如Linux、RTOS等 了解各种外设接口及其驱动程序开发,如SPI、I2C、USART等 熟悉常用的嵌入式开发工具和软件工程流程&#…

如何通过 5 步激活策略扩大用户群

假设,你现在是一个“深藏功与名”的增长黑客。前期你表现非常好,做了一些拉新实验,每天都有上千用户进入到产品。团队成员和家人朋友都非常开心你们的产品增长终于有了起色。 然而,如果你不重视拉新(acquisition&…

ES6系列之let、const、箭头函数使用的坑

变量提升块级作用域的重要性箭头函数this的指向rest参数和arguments 1.ECMAScript与Js的关系 2.Babel转码器 Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在老版本的浏览器执行。这意味着,你可以用ES6的方式编写程序&…

【微服务】springboot整合redis哨兵集群使用详解

目录 一、前言 二、环境准备 三、安装redis 3.1 前置准备 3.1.1 下载安装包 3.1.2 准备依赖环境 3.1.3 上传并解压包 3.2 执行安装 四、搭建redis主从集群 4.1 环境准备 4.2 搭建过程 4.2.1 创建实例文件目录 4.2.2 修改redis.conf配置文件 4.2.3 拷贝配置文件 4…

喜讯! WorkPlus入选中国信通院数字产品“2023全景图”!

“2023数字生态发展大会”暨中国信通院“铸基计划” WorkPlus喜讯 7月27日,中国信息通信研究院(下称“中国信通院”)主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在京召开,大会全面地总结了“铸基计划”上半…