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

【SpringBoot系列】WebMvcConfigurer配置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
      • 1.WebMvcConfigurer 介绍
      • 2.拦截器的作用
      • 3.InterceptorRegistry
    • 二.实战演练
      • 1.配置文件
      • 2.处理拦截器

一.基本介绍

1.WebMvcConfigurer 介绍

在 Spring MVC 框架中,WebMvcConfigurer 是一个非常重要的接口,它允许开发者通过 Java 配置的方式对 Spring MVC 进行定制化设置。addInterceptors 方法是 WebMvcConfigurer 接口中用于注册拦截器的关键方法,它使得开发者可以在请求处理流程中的不同阶段插入自定义逻辑,例如权限验证、日志记录等。以下是对 addInterceptors 方法的详细解析,以及如何使用它来增强你的 Web 应用程序。
在这里插入图片描述

2.拦截器的作用

拦截器在 Spring MVC 中主要用于以下场景:

  1. 日志记录:在请求处理前后记录日志,便于问题追踪和性能监控。
  2. 权限检查:确保用户请求的合法性,拦截未授权访问。
  3. 数据预处理:在请求到达控制器之前,对请求参数进行预处理或验证。
  4. 性能监控:统计请求处理时间,优化应用性能。

3.InterceptorRegistry

InterceptorRegistry 是 Spring MVC 配置中用于注册拦截器的类。它提供了一系列方法来配置拦截器的行为,包括指定拦截哪些请求路径以及排除哪些请求路径。以下是 InterceptorRegistry 的一些主要方法:

  1. addInterceptor: 用于添加一个拦截器实例。这个方法接受一个实现了 HandlerInterceptor 接口的实例,并返回一个 InterceptorRegistration 对象,允许进一步配置该拦截器,例如添加 URL 模式和排除模式。

  2. addWebRequestInterceptor: 这个方法与 addInterceptor 类似,也是用于添加拦截器,但它专门用于实现 WebRequestInterceptor 接口的拦截器。

  3. getInterceptors: 该方法返回所有注册的拦截器列表。这可以用于检查哪些拦截器已经配置在应用程序中。

  4. addPathPatterns: 这是一个链式调用的方法,用于指定拦截器应该应用到的 URL 路径模式。可以调用多次来添加多个路径模式。

  5. excludePathPatterns: 与 addPathPatterns 相对应,这个方法用来排除某些路径模式,让拦截器不会应用到这些路径上。

  6. order: 允许指定拦截器的顺序。数字越小,优先级越高。

通过这些方法,开发者可以根据需要配置拦截器的行为,以满足不同的业务场景。例如,可以创建一个自定义的 HandlerInterceptor 实现,并使用 InterceptorRegistry 来注册这个拦截器,同时指定它应该拦截的请求路径以及排除的请求路径。这样,当请求进入应用程序时,注册的拦截器就会按照配置的规则进行请求的预处理、后处理以及完成后的处理。

二.实战演练

1.配置文件

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 配置myInterceptor的拦截规范(如拦截的路径等等)registry.addInterceptor(new AuthInterceptor())// 设置需要拦截的路径(这里拦截所有的路径).addPathPatterns("/**")// 设置书籍放行.excludePathPatterns("/bookInfo/**")// 设置登录放行.excludePathPatterns("/login", "/getOpenId", "/register")// 设置Swagger访问放行.excludePathPatterns("/api-docs", "/swagger-ui.html/**", "/swagger-ui.html", "/swagger-resources/**", "/swagger-ui.html#/**")// 如资源文件放行.excludePathPatterns("/webjars/**", "/doc.html", "classpath:/META-INF/resources/");}
}

在这里插入图片描述

2.处理拦截器

@Component
public class AuthInterceptor implements HandlerInterceptor {@Autowiredprivate NewSpaceJedisClient belleJedisClient;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 如果请求的URL不包含排除路径,则进行Token验证String token = request.getHeader("Authorization");if (token == null || token.isEmpty()) {// 如果没有Token,返回401 Unauthorizedthrow new ArithmeticException("No token provided");}// 验证token是否有效final String userName = JwtTokenUtil.verifierJwtToken(token);String redisToken = belleJedisClient.get(RedisConstant.TOKEN_PREFIX + userName);if (StringUtils.isEmpty(redisToken)) {// 有token 但是token失效了throw new ArithmeticException("Token is invalid");}return true;}
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

http://www.lryc.cn/news/420504.html

相关文章:

  • 学懂C++ (十九):高级教程——深入详解C++信号处理
  • SOMEIP_ETS_032:echoUINT8ArrayMinSize
  • JS+CSS案例:可适应上下布局和左右布局的菜单(含二级菜单)
  • 【数据结构】线性表,顺序表
  • Spring之最基础的创建与Bean的存储与获取(还有Maven加载jar包报错的解决方法)
  • RabbitMQ应用问题 - 消息顺序性保证、消息积压问题
  • linux tcp通讯demo
  • 在 MongoDB 中,如何配置副本集以实现读写分离?
  • 虚拟dom-Diff算法
  • 01创建型设计模式——单例模式
  • 图像分割(一)
  • C++ 新经典:设计模式 目录(先留框架,慢慢来~)
  • go之命令行工具urfave-cli
  • 四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较
  • MySQL的脏读、不可重复读、幻读与隔离级别
  • 程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇
  • Burp Suite的使用和文件上传漏洞靶场试验
  • 如何在Ubuntu中安装deepin wine版的企业微信
  • 案例:Nginx + Tomcat集群(负载均衡 动静分离)
  • 【密码学】密码协议的分类:②认证协议
  • 异步编程(Promise详解)
  • DjangoORM注入分享
  • 【HBZ分享】Redis各种类型的数据结构应用场景
  • anaconda创建并且配置pytorch(完整版)
  • 高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?
  • AtCoder Beginner Contest 365 A~E
  • 多机部署, 负载均衡-LoadBalance
  • (回溯) LeetCode 78. 子集
  • DQL数据查询语言(多表处理)—/—<7>
  • 力扣刷题总结