What does `HandlerInterceptor` do?

HandlerInterceptorSpringMVC 中的一个接口,在SpringMVC应用中它提供了一种实现应用级拦截器的机制。

第1步:引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

第2步:定义拦截器

import com.zhangziwa.practisesvr.utils.response.ResponseContext;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;@Component
public class ResponsePostInterceptor implements HandlerInterceptor {# 在进入Controller执行之前调用# 该方法返回 true,则继续执行后续的Controller# 该方法返回 false,则中断,不会执行后续的Controller 和 Interceptor# 验证行为:登录验证、权限控制# 记录行为:性能监控、日志记录等操作@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {# 记录行为:比如此处为记录一下日志System.err.println("***ResponsePostInterceptor.preHandle***");return true;}# controller执行之后,页面渲染之前调用# 数据补充行为:对请求处理的结果(如 ModelAndView)进行进一步的修改或操作@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {# 记录行为:比如此处为记录一下日志System.err.println("***ResponsePostInterceptor.postHandle***");# 数据补充行为:比如此处对HttpHeaders 和 HttpStatus 进行补充if (response.isCommitted()) {System.out.println("response is committed");return;}HttpHeaders headers = ResponseContext.getHeaders();if (headers != null) {headers.forEach((key, values) -> values.forEach((value) -> {if (!response.getHeaderNames().contains(key)) {response.addHeader(key, value);}}));}if (ResponseContext.getResponseCode() != null) {response.setStatus(ResponseContext.getResponseCode().value());}}# 页面渲染之后调用,无论是否发生异常都会被调用# 数据清理行为:通常用于资源清理# 记录行为:记录请求结束时间等@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {# 记录行为:比如此处为记录一下日志System.err.println("***ResponsePostInterceptor.afterCompletion***");# 数据清理行为:比如此处用于资源清理ResponseContext.clear();}
}

第3步:注册拦截器

注册后拦截器才正常使用,所以使用前要先注册,所谓注册就是放到指定地方,Spring就知道有这个拦截器了。

import com.zhangziwa.practisesvr.interceptor.ResponsePostInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
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 WebMvcConfig implements WebMvcConfigurer {@Autowiredprivate ResponsePostInterceptor responsePostInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(responsePostInterceptor);}
}

第4步:使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

***ResponsePostInterceptor.preHandle***
***Controller.getAllStudents4***
***ResponsePostInterceptor.postHandle***
***ResponsePostInterceptor.afterCompletion***

参考

springboot之HandlerInterceptor拦截器入门
Spring MVC拦截器HandlerInterceptor全解!

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

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

相关文章

实现JavaScript的函数链式执行

本篇文章将会实现函数链式执行&#xff0c;链式步骤延时等操作。 1.工具类 const executor (name) > {/*** 执行器名称*/const executorName name;/*** 方法数组*/const methodArray [];/*** 同步执行某个方法*/function run(func){methodArray.push(func);return this…

反敏捷宣言

很多时候&#xff0c;敏捷在实践中并没有帮助团队更好的完成工作&#xff0c;而是成为了某种障碍以及僵化的流程。原文: The Anti-Agile Manifesto 警告1: 如果你是敏捷教练或Scrum Master或任何其他形式的敏捷支持者&#xff0c;本文的很多内容都会让你不爽。本文的目的之一是…

【GNN2】PyG完成图分类任务,新手入门,保姆级教程

上次讲了如何给节点分类&#xff0c;这次我们来看如何用GNN完成图分类任务&#xff0c;也就是Graph-level的任务。 【GNN 1】PyG实现图神经网络&#xff0c;完成节点分类任务&#xff0c;人话、保姆级教程-CSDN博客 图分类就是以图为单位的分类&#xff0c;举个例子&#xff1…

淘宝商家实现批量上货API接口调用接入说明(淘宝开放平台免申请接入)

API接入详细步骤&#xff1a; 第一步&#xff1a;在淘宝开放平台中选择接口塡写应用申报递交给我司&#xff0c;确认接口是否都有。 第二步&#xff1a;确认接口都有&#xff0c;需交1000元进行测试&#xff0c;可以测试三天&#xff0c;测试数据符合淘宝开放平台接口参数说明&…

Excel学习

文章目录 学习链接Excel1. Excel的两种形式2. 常见excel操作工具3.POI1. POI的概述2. POI的应用场景3. 使用1.使用POI创建excel2.创建单元格写入内容3.单元格样式处理4.插入图片5.读取excel并解析图解POI 4. 基于模板输出POI报表5. 自定义POI导出工具类ExcelAttributeExcelExpo…

openAI API key不需要中转,自己就可以使用正版

很多小伙伴因为不知道怎么使用原版&#xff0c;用的都是国内套壳的&#xff0c;国内套壳的有些价格不合适&#xff0c;如何是3.5的话只需要绑定虚拟信用卡就可以使用 想使用openai API key4.0的话你需要先开通ChatGPTplus&#xff0c;在绑定openai API key&#xff0c;绑定ope…

【上分日记】第369场周赛(分类讨论 + 数学 + 前缀和)

文章目录 前言正文1.3000. 对角线最长的矩形的面积2.3001. 捕获黑皇后需要的最少移动次数3.3002. 移除后集合的最多元素数3.3003. 执行操作后的最大分割数量 总结尾序 前言 终于考完试了&#xff0c;考了四天&#xff0c;也耽搁了四天&#xff0c;这就赶紧来补这场周赛的题了&a…

《 乱弹篇(二)》

题记 昨&#xff08;2024年1月12日&#xff09;天&#xff0c;既然笔者因感到写时评文力不从心&#xff0c;新辟一专栏《乱弹篇》&#xff0c;开始了“ 东西南北&#xff0c;古今中外&#xff0c;谈而不乱&#xff0c;抒怀而已”的写作路径&#xff0c;就要走下去&#xff0c;…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存&#xff08;C#&#xff09;&#xff09; Baumer工业相机Baumer工业相机的图像高速保存的技术背景Baumer工业相机通过NEOAPI SDK函数图像高速保存在NEOAPI SDK里实现线程高速图像保存&#xff1a;工业相机高…

AI副业拆解:人像卡通化,赋予你的形象全新生命力

大家好我是在看&#xff0c;记录普通人学习探索AI之路。 &#x1f525;让你的形象瞬间穿越二次元&#xff01;&#x1f680;人像卡通化&#xff0c;捕捉你的独特魅力&#xff0c;让真实与梦幻在此刻交融。&#x1f3a8; 今天为大家介绍如何免费把人像卡通化--漫画风 https://w…

【密码学】python密码学库pycryptodome

记录了一本几乎是10年前的书&#xff08;python绝技–用python成为顶级黑客&#xff09;中过时的内容 p20 UNIX口令破解机 里面提到了python标准库中自带的crypt库&#xff0c;经验证Python 3.12.1中并没有这个自带的库&#xff0c;密码学相关的库目前&#xff08;2024.1.12&a…

Quartus 软件界面介绍与部分使用技巧

内容太多&#xff0c;只能慢慢补充完善了~ 对一个软件的熟练掌握&#xff0c;不仅在于完成项目工程&#xff0c;还在于对一个软件的各个功能的位置与使用要熟稔于心&#xff08;个人看法&#xff09;。 软件界面 默认打开的软件界面如下&#xff1a; 关掉所有能关闭的窗口&am…