news 2026/5/25 19:47:02

拦截器注册InterceptorRegistry 实现讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
拦截器注册InterceptorRegistry 实现讲解
1.核心概念

InterceptorRegistrySpring MVC提供的拦截器注册器,用于配置拦截器的拦截规则。

2.主要方法
addInterceptor(): 添加拦截器 addPathPatterns(): 指定要拦截的路径 excludePathPatterns(): 指定要排除的路径 路径匹配规则 /api/**: 匹配 /api/ 下的所有路径(包括多级子路径) /api/*: 只匹配 /api/ 下的一级路径 /api/user/login: 精确匹配某个具体路径
3.完整实现代码
​ package com.itheima.miniblog.core.interceptor; 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 // 添加这个注解,让 Spring 识别这是一个配置类 public class WebMvcConfig implements WebMvcConfigurer { @Autowired private AuthInterceptor authInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // 注册认证拦截器 registry.addInterceptor(authInterceptor) // 添加拦截器 .addPathPatterns("/api/**") // 拦截所有 /api/** 路径 .excludePathPatterns( // 排除以下路径(不需要登录验证) "/api/user/login", // 登录接口 "/api/user/register" // 注册接口 ); } }
4.详细解释

1. @Configuration 注解

@Configuration

告诉 Spring 这是一个配置类

Spring 会自动扫描并加载这个配置

如果没有这个注解,配置可能不会生效

2. registry.addInterceptor(authInterceptor)

registry.addInterceptor(authInterceptor)

将我们自定义的 AuthInterceptor 注册到 Spring MVC

authInterceptor 通过 @Autowired 自动注入

3. addPathPatterns("/api/")**

.addPathPatterns("/api/**")

指定拦截器要拦截的路径

** 表示匹配任意多级路径

例如会拦截:

/api/user/info

/api/article/list

/api/comment/add

4. excludePathPatterns(...)

.excludePathPatterns(

"/api/user/login",

"/api/user/register"

)

排除不需要登录验证的接口

即使这些路径匹配 /api/**,也不会被拦截

常见的排除路径:

登录接口

注册接口

验证码接口

公开的文章列表等

5.执行流程示例

场景 1:访问登录接口

请求: POST /api/user/login ↓ 匹配 /api/** ✓ ↓ 在排除列表中 ✓ ↓ 不执行拦截器,直接放行 ✓ 场景 2:访问用户信息接口 请求: GET /api/user/info ↓ 匹配 /api/** ✓ ↓ 不在排除列表中 ✓ ↓ 执行 AuthInterceptor.preHandle() ✓ ↓ 检查 Token,验证登录状态

扩展配置示例

如果你需要更复杂的配置,可以这样写:

@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authInterceptor) .addPathPatterns("/api/**") .excludePathPatterns( "/api/user/login", // 登录 "/api/user/register", // 注册 "/api/user/captcha", // 验证码 "/api/article/list", // 公开的文章列表 "/api/article/detail/**" // 公开的文章详情 ) .order(1); // 设置拦截器执行顺序(数字越小越先执行) }
6.常见问题

Q1: 为什么配置了拦截器但不生效?

检查是否添加了 @Configuration 注解 检查 AuthInterceptor 是否添加了 @Component 注解 检查路径是否正确匹配

Q2: 如何拦截多个不同的路径?

.addPathPatterns("/api/**", "/admin/**", "/user/**")

Q3: 如何排除某个目录下的所有接口?

.excludePathPatterns("/api/public/**") // 排除所有 /api/public/ 下的接口

这样配置后,所有访问 /api/** 的请求都会经过AuthInterceptor的验证,除了登录和注册接口可以直接访问。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 6:18:52

打开软件出现找不到vcruntime140.dll文件 无法运行的情况 下载修复解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/26 6:18:39

本地部署DeepSeek

ollama终端的方式部署参考:ollama本地部署 智谱API Key获取 LM Studio 它是模型的托管平台,可以把模型加载后,作为服务器向外提供服务器,本身也具有简单的对话框可以聊天。 :https://lmstudio.ai/ 在左下角改为开发者…

作者头像 李华
网站建设 2026/5/26 5:18:59

JavaWeb企业级开发---JavaScript

记录在听黑马课的时候的笔记以及课堂上练习的代码,文章图源于我在听课的时候所截的屏,所以有些不清晰,请见谅。下面是课程链接,可点击自行跳转。 【黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(…

作者头像 李华
网站建设 2026/5/26 5:08:53

微信小程序_WXML

图片&#xff1a;等比例填充&#xff08;头像&#xff09;&#xff1a;mode“aspectFill”<image src"{{userInfo ? userInfo.avatarUrl :/images/1.png}}" mode"aspectFill"></image>

作者头像 李华
网站建设 2026/5/26 5:09:36

Springboot连锁家政保洁管理系统03zmn(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能&#xff1a;分店管理员,用户,保洁员,通知信息,独立服务,团队服务,独立服务信息,团队服务信息,独立服务订单,团队服务订单,团队派单,完成订单,独立服务取消,团队服务取消开题报告内容基于SpringBoot的连锁家政保洁管理系统开题报告一、研究背景与意义研…

作者头像 李华
网站建设 2026/5/25 5:38:43

Redis原理篇-Dict的rehash

** 不管是扩容还是收缩&#xff0c;必定会创建新的哈希表&#xff0c;导致哈希表的size和sizemask变化&#xff0c;而key的查询与sizemask有关。因此必须对哈希表中的每一个key重新计算索引&#xff0c;插入新的哈希表&#xff0c;这个过程称为rehash。过程是这样的&#xff1a…

作者头像 李华