温馨提示×

温馨提示×

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

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

java拦截器适用哪些场景

发布时间:2026-10-08 03:23:07 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 开发中,拦截器(Interceptor)通常指 Spring MVC 的 HandlerInterceptor 或类似机制(如 Struts2 Interceptor、MyBatis Interceptor、Feign Interceptor 等)。下面以 Spring MVC 拦截器 为主,系统说明其适用场景、不适合的场景和典型例子。


一、Java 拦截器常见适用场景

1️⃣ 登录校验 / 权限控制(最常用)

在请求到达 Controller 之前判断用户是否登录、是否有权限访问接口。

典型场景

  • 后台管理系统
  • API 接口鉴权
  • 管理员 / 普通用户权限区分

示例

if (request.getSession().getAttribute("user") == null) {
    response.sendRedirect("/login");
    return false;
}

2️⃣ 接口统一日志记录

记录请求信息,用于监控、审计、问题排查。

记录内容

  • 请求 URL
  • 请求参数
  • 请求 IP
  • 耗时
  • 用户信息

示例

long start = System.currentTimeMillis();
// 处理请求
long end = System.currentTimeMillis();
log.info("接口耗时:{} ms", end - start);

3️⃣ 接口性能监控

统计接口响应时间,发现慢接口。

适用

  • 性能优化
  • 接口 SLA 监控
  • 压测分析

4️⃣ 请求 / 响应参数处理

在请求前后对数据进行统一处理。

常见操作

  • 参数脱敏
  • 统一编码
  • 请求头处理(如 token)
  • 响应结果包装

5️⃣ 防重复提交

防止用户短时间多次点击提交。

实现思路

  • 基于 token
  • 基于 IP + URL + 时间

6️⃣ 跨域处理(CORS)

统一设置跨域响应头。

response.setHeader("Access-Control-Allow-Origin", "*");

⚠️ 更推荐使用 @CrossOrigin 或全局 CORS 配置


7️⃣ 多租户 / 数据源切换

在请求进入业务前,根据域名或 token 切换数据源。


8️⃣ 统一异常处理(配合使用)

虽然异常通常在 @ControllerAdvice 处理,但拦截器可做统一入口控制。


二、拦截器不适合的场景

❌ 复杂业务逻辑

  • 应放在 Service 层

❌ 数据库事务控制

  • 使用 @Transactional

❌ 细粒度方法级权限

  • 使用 Spring Security / Shiro / 注解

❌ 参数校验

  • 使用 @Valid / Validator

三、拦截器 vs 过滤器 vs AOP

对比项 拦截器 过滤器 AOP
作用层 Spring MVC Servlet 方法级
能拿到 Controller ✅ ❌ ✅
细粒度 中 粗 细
使用频率 高 中 高

四、典型拦截器结构(Spring)

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) {
        // 请求前
        return true;
    }

    @Override
    public void postHandle(...) {
        // 请求后
    }

    @Override
    public void afterCompletion(...) {
        // 视图渲染后
    }
}

五、一句话总结

Java 拦截器适合做“横切、统一、与请求相关”的控制逻辑,而不是业务处理。

如果你愿意,我可以:

  • 给你一个 完整 Spring Boot 拦截器 Demo
  • 对比 Interceptor vs Filter 源码级区别
  • 讲 MyBatis / Feign 拦截器场景
向AI问一下细节

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

AI
助
手