温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何自定义拦截器

发布时间:2026-08-30 05:04:39 来源:亿速云 阅读:84 作者:小樊 栏目:编程语言

“拦截器”这个概念在不同技术栈里含义略有不同,最常见的是 Spring 拦截器Vue/React 请求拦截器Axios 拦截器 等。下面我按最常见的几种场景分别说明,你可以直接跳到你用到的那一块。


一、Spring Boot 自定义拦截器(最常见)

1️⃣ 定义拦截器(实现 HandlerInterceptor

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class MyInterceptor implements HandlerInterceptor {

    // 控制器方法执行前
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("请求拦截:" + request.getRequestURI());
        return true; // true 放行,false 拦截
    }

    // 控制器方法执行后
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           org.springframework.web.servlet.ModelAndView modelAndView) {
        System.out.println("请求处理完成");
    }

    // 整个请求完成后
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) {
        System.out.println("请求结束");
    }
}

2️⃣ 注册拦截器(实现 WebMvcConfigurer

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 WebConfig implements WebMvcConfigurer {

    private final MyInterceptor myInterceptor;

    public WebConfig(MyInterceptor myInterceptor) {
        this.myInterceptor = myInterceptor;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor)
                .addPathPatterns("/api/**")   // 拦截路径
                .excludePathPatterns("/api/login"); // 排除路径
    }
}

✅ 适合做:

  • 登录校验
  • 权限控制
  • 接口耗时统计
  • 日志记录

二、Axios 自定义拦截器(前端)

1️⃣ 请求拦截器

axios.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  error => Promise.reject(error)
);

2️⃣ 响应拦截器

axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      console.log('未登录或 token 失效');
    }
    return Promise.reject(error);
  }
);

✅ 适合做:

  • token 自动注入
  • 接口错误统一处理
  • loading 状态管理

三、Vue / React 项目中的拦截思想

在 Vue/React 中,拦截器通常不是框架本身提供,而是:

  • Axios 拦截器
  • Router 守卫(路由拦截)

Vue Router 路由拦截示例

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token');
  if (to.meta.requiresAuth && !token) {
    next('/login');
  } else {
    next();
  }
});

四、对比总结

场景 拦截器类型 核心作用
Spring Boot HandlerInterceptor 请求统一处理
Axios interceptor HTTP 请求/响应处理
Vue Router beforeEach 页面访问权限
网关 Gateway Filter 微服务统一拦截

如果你能告诉我:

  • ✅ 用的是什么技术(Spring / Vue / React / Axios / Gateway)
  • ✅ 想拦截什么(登录、权限、日志、参数校验)

我可以直接给你定制一份完整可用的拦截器代码

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI