“拦截器”这个概念在不同技术栈里含义略有不同,最常见的是 Spring 拦截器、Vue/React 请求拦截器、Axios 拦截器 等。下面我按最常见的几种场景分别说明,你可以直接跳到你用到的那一块。
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("请求结束");
}
}
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.interceptors.request.use(
config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
error => Promise.reject(error)
);
axios.interceptors.response.use(
response => response,
error => {
if (error.response.status === 401) {
console.log('未登录或 token 失效');
}
return Promise.reject(error);
}
);
✅ 适合做:
在 Vue/React 中,拦截器通常不是框架本身提供,而是:
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 | 微服务统一拦截 |
如果你能告诉我:
我可以直接给你定制一份完整可用的拦截器代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。