What does `HandlerInterceptor` do?

2024-01-13 12:12
文章标签 handlerinterceptor

本文主要是介绍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全解!

这篇关于What does `HandlerInterceptor` do?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601412

相关文章

Filter 和 HandlerInterceptor 的执行顺序

Filter 和 HandlerInterceptor 的执行顺序 在 Spring 框架中,Filter 和 HandlerInterceptor 的执行顺序如下: Filter(过滤器): Filter 是 Java Servlet 规范中定义的组件,用于在请求进入 Servlet 之前或响应返回给客户端之前执行特定操作。Filter 在 Web 应用程序中全局生效,可以对

HandlerInterceptor 拦截器,生成dongtai token

// 实现拦截器@Componentpublic class loginCheckInterceptor implements HandlerInterceptor {@Override //目标方法运行前执行,public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object ha

Spring中HandlerInterceptor源码

HandlerInterceptor源码 package org.springframework.web.servlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.

ThreadLocal使用,配合拦截器HandlerInterceptor使用

ThreadLocal使用,配合拦截器HandlerInterceptor使用 ThreadLocal的使用场景通常涉及多线程环境下需要为每个线程保留独立状态的情况。它提供了一种简单的方式来管理线程本地变量,使得每个线程都可以独立地访问和修改自己的变量副本,而不会影响其他线程的副本。 包括的方法 ThreadLocal的主要方法包括: get():获取当前线程的变量副本。set(value

【Spring底层原理高级进阶】轻松掌握 Spring MVC 的拦截器机制:深入理解 HandlerInterceptor 接口和其实现类的用法

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 🚀 本专栏纯属为爱发电永久免费!!! 这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽http://suzee.blog.csdn.net/ 老样子 先用一个生动的例子 来讲解 今天的主角 拦截器的作用 一天,

Spring Boot整合日期转换器(Converter)和拦截器(HandlerInterceptor)

添加日期转换器(Converter) public class DataConverter implements Converter<String, Date> {@Overridepublic Date convert(String s) {try {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");r

Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十三章、拦截器 拦截器 :Interceptor 拦截 中断 类似于javaweb中的Filter,不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和之后执行一些操作,例如日志记录、权限验证、数据处理等。 拦截器

HandlerInterceptor拦截器的使用

1.使用背景 Web项目中需要判断http接口用户Post上来的数据是否合法,如果不合法要另做处理,用户Post上来的数据是Json形式的,我们用了@RequestBody标记自动将json形式的提交封装为一个Model对象,这样一来,我们就不能判断在自动封装过程中是否出现了异常,此时便想起了springMVC中的interceptor,用于处理请求之前,做一些处理,我们可以取消@Request

Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十三章、拦截器 拦截器 :Interceptor 拦截 中断 类似于javaweb中的Filter,不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和之后执行一些操作,例如日志记录、权限验证、数据处理等。 拦截器

HandlerInterceptor拦截器配置、SPI

http请求在handler中的执行顺序: 前端发送请求---->preHandler---->afterConcurrentHandlingStarted----->Controller----->postHandle---->afterCompletion---->返回请求 HandlerInterceptorAdapter一般做一些登陆拦截。 package org.springfra