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

SpringBoot3-实现和注册拦截器

1、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.atguigu</groupId><artifactId>pro28-springboot-interceptor</artifactId><version>1.0-SNAPSHOT</version><!--所有springboot项目都必须继承自 spring-boot-starter-parent --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version><relativePath />  <!-- 根据情况添加 --></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--web开发的场景启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--导入配置处理器,配置文件自定义的properties配置都会有提示--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
</project>

2、实现HandlerInterceptor接口

package com.atguigu.interceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle...");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle...");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion...");}
}

3、实现WebMvcConfigurer接口

package com.atguigu.config;
import com.atguigu.interceptor.MyInterceptor;
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 MyMvcConfig implements WebMvcConfigurer {@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/hello/a/b");}
}

4、HelloController.java

package com.atguigu.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {@GetMapping("/a/b")public String h01() {return "Hello world!";}@GetMapping("/b")public String h02() {return "hi world!";}@GetMapping("/c")public String h03() {return "bye bye!";}
}

5、MyApplication.java

package com.atguigu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class);}
}

 6、HandlerInterceptor

HandlerInterceptor是Spring MVC框架中的一种拦截器,类似于Servlet开发中的过滤器Filter。它用于在请求处理器执行前后进行预处理和后处理,可以用于实现权限检查、性能监控等操作。

在Spring MVC中,拦截器是一个接口,需要实现preHandle、postHandle和afterCompletion方法。其中,preHandle方法在请求处理器处理请求之前执行,可以进行编码、安全控制、权限校验等处理;postHandle方法在请求处理器处理请求之后、渲染视图之前执行,可以通过modelAndView对模型数据进行处理或对视图进行处理;afterCompletion方法在请求处理完成后执行,可以进行资源清理等工作。

在实现拦截器时,需要将拦截器注册到Spring MVC的配置文件中,并指定需要拦截的URL和处理器。当请求匹配到指定的URL时,拦截器就会自动执行。

总之,HandlerInterceptor是Spring MVC中非常有用的工具,可以用于实现各种处理操作,提高Web应用程序的性能和安全性。

相关文章:

  • Nginx网站服务详解(设置并发数、实现不同虚拟主机等)
  • 初始数据结构(加深对旋转的理解)
  • 深度学习猫狗分类 - python opencv cnn 计算机竞赛
  • SELinux refpolicy详解(13)
  • HDFS Java API 基本操作实验
  • 解决方案:Mac 安装 pip
  • 用23种设计模式打造一个cocos creator的游戏框架----(十)迭代器模式
  • Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道
  • java 有一个N位数字,各位加起来不超过M。
  • 【银行测试】金融项目+测试方法范围分析,功能/接口/性能/安全...
  • 【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——登录页面
  • 【ArcGIS Pro微课1000例】0051:创建数据最小几何边界范围(点、线、面数据均可)
  • 【Vue+Python】—— 基于Vue与Python的图书管理系统
  • 第一课【习题】HarmonyOS应用/元服务上架
  • 快速登录界面关于如何登录以及多账号列表解析以及config配置文件如何读取以及JsLogin模块与SdoLogin模块如何通信(4)
  • 【个人向】《HTTP图解》阅后小结
  • Java|序列化异常StreamCorruptedException的解决方法
  • node和express搭建代理服务器(源码)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 基于webpack 的 vue 多页架构
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前嗅ForeSpider中数据浏览界面介绍
  • 区块链将重新定义世界
  • 小李飞刀:SQL题目刷起来!
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​插件化DPI在商用WIFI中的价值
  • #微信小程序:微信小程序常见的配置传旨
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C++17) optional的使用
  • (C++17) std算法之执行策略 execution
  • (c语言)strcpy函数用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (论文阅读30/100)Convolutional Pose Machines
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十三)Maven插件解析运行机制
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ****Linux下Mysql的安装和配置
  • *上位机的定义
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net接口调试与案例
  • .net开发引用程序集提示没有强名称的解决办法
  • .Net语言中的StringBuilder:入门到精通
  • @JsonFormat与@DateTimeFormat注解的使用
  • @ResponseBody
  • [2016.7.Test1] T1 三进制异或