拦截器(Interceptor)是一种在请求/响应到达目标之前或之后进行“拦截处理”的机制,不同技术栈中用途略有差异,但核心思想一致:在不修改原始逻辑的前提下,统一增强、控制或监控流程。
下面按常见场景说明它能“做什么用”。
拦截请求,判断是否登录或是否有权限访问
Token / Session例子(后端)
if (!hasLogin(request)) {
response.sendRedirect("/login");
return;
}
例子(前端 Axios)
axios.interceptors.request.use(config => {
config.headers.Authorization = getToken();
return config;
});
在请求发出前或响应返回后自动处理数据
常见场景:
tokenContent-Typeaxios.interceptors.response.use(
res => res.data,
err => Promise.reject(err)
);
记录请求耗时、参数、来源 IP 等
用途:
long start = System.currentTimeMillis();
// 执行目标方法
long cost = System.currentTimeMillis() - start;
log.info("接口耗时: {}ms", cost);
统一捕获异常,避免重复 try-catch
try {
return invocation.proceed();
} catch (Exception e) {
return Result.error("系统异常");
}
在真正执行业务前校验或修正参数
拦截短时间内的重复请求
token + redis根据请求自动切换环境
axios.interceptors.request.use(...)
axios.interceptors.response.use(...)
✅ 用于:
| 类型 | 作用范围 |
|---|---|
| Filter | Servlet 层 |
| Interceptor | Spring MVC 层 |
| AOP | 方法层 |
✅ 常用于:
用于:
create_time)用于:
| 对比项 | 拦截器 | 过滤器 | AOP |
|---|---|---|---|
| 层级 | MVC | Servlet | 方法 |
| 精细度 | 中 | 粗 | 细 |
| 是否依赖框架 | 是 | 否 | 是 |
| 常见用途 | 权限、日志 | 编码、跨域 | 事务、缓存 |
拦截器用来“在请求或方法执行前后,统一做事情”,是解耦、增强、控制流程的利器。
如果你愿意,可以告诉我:
我可以直接给你可落地的拦截器示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。