“拦截器失效”这个问题比较宽泛,通常涉及前端(如 Axios、前端路由)、后端(如 Spring、Express/Koa)或网络代理等场景。由于您没有指定具体技术栈,我为您梳理了排查思路和常见场景的解决方案。
请先确认您是在哪种场景下遇到问题的:
无论哪种拦截器,失效通常遵循以下三个原因:
现象:请求没有经过 request 拦截器,或响应没有经过 response 拦截器。
排查与解决:
request.js),确保全项目都引入的是这个实例,而不是原生 axios。import axios from 'axios'; axios.get(...)import request from './utils/request'; request.get(...)// 正确示例
const service = axios.create();
service.interceptors.request.use(config => {
config.headers['Token'] = 'xxx';
return config; // 必须返回 config
});
request 拦截器中,如果漏了 return config,请求会卡住或直接失败。现象:访问 API 时,拦截器的 preHandle 没有执行。
排查与解决:
@Configuration 类实现了 WebMvcConfigurer。@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**") // 拦截路径
.excludePathPatterns("/login"); // 排除路径
}
}
addPathPatterns 是否正确?如果配了 /api/*,访问 /api/user/list 可能拦截不到(需注意通配符)。/** 测试,再逐步缩小范围。MyInterceptor 没有加 @Component,或者注册时没有 @Bean 注入,可能导致 @Autowired 注入的 Service 为 null,从而报错失效。现象:JWT 或登录校验没生效。
排查与解决:
FilterRegistrationBean 注册,或在配置类中定义。现象:路由跳转前没有弹出登录框或没有校验权限。
排查与解决:
// main.js 或 router/index.js
router.beforeEach((to, from, next) => {
// 逻辑...
next(); // 必须调用 next
});
next(),路由会卡死;如果逻辑分支中漏掉 next(),也会表现为“失效”。现象:中间件没有处理请求。
排查与解决:
next() 才能流向下一个中间件。await next()。app.use(loggerMiddleware); // 先
app.use(router.routes()); // 后
请对照检查:
export 并正确导入?use, addInterceptors)?return 或 next() 的遗漏?请补充以下信息,我可以直接定位代码问题:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。