温馨提示×

温馨提示×

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

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

什么是java拦截器

发布时间:2026-09-18 19:44:01 来源:亿速云 阅读:99 作者:小樊 栏目:编程语言

在 Java 开发中,拦截器(Interceptor)是一种在不修改原有代码逻辑的情况下,对请求或方法调用进行拦截、预处理或后处理的机制。它常用于权限校验、日志记录、事务管理、性能监控等场景。

下面从概念、常见类型、工作原理和示例几个方面说明。


一、什么是拦截器(通俗理解)

拦截器就像“门卫”或“过滤器”:

  • 请求进来时先经过它
  • 可以在执行前、执行后、甚至异常时做一些统一处理
  • 不影响业务代码本身

✅ 好处:

  • 解耦
  • 复用
  • 统一控制

二、Java 中常见的拦截器类型

1️⃣ Spring MVC 拦截器(最常用)

用于 Web 请求拦截

接口:

HandlerInterceptor

主要方法:

preHandle()    // 请求前
postHandle()   // 请求后(视图渲染前)
afterCompletion() // 请求完成

示例:

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) {
        // 登录校验
        if (request.getSession().getAttribute("user") == null) {
            response.sendRedirect("/login");
            return false;
        }
        return true;
    }
}

注册:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login");
    }
}

2️⃣ Servlet 过滤器(Filter)

严格说不是“拦截器”,但功能类似

区别:

对比项 Filter Interceptor
层次 Servlet 层 Spring MVC 层
依赖 不依赖 Spring 依赖 Spring
使用场景 编码、跨域 登录、权限

3️⃣ MyBatis 拦截器

用于 SQL 执行拦截

接口:

Interceptor

常见用途:

  • 分页
  • 审计字段(创建时间)
  • SQL 性能监控

4️⃣ Spring AOP(方法级拦截)

更细粒度,拦截 任意方法

常见注解:

@Before
@After
@Around

示例:

@Aspect
@Component
public class LogAspect {
    @Around("execution(* com.xxx.service.*.*(..))")
    public Object log(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.currentTimeMillis();
        Object result = pjp.proceed();
        System.out.println("耗时:" + (System.currentTimeMillis() - start));
        return result;
    }
}

三、拦截器 vs 过滤器 vs AOP

类型 拦截对象 使用场景
Filter HTTP 请求 编码、跨域
Interceptor Controller 请求 登录、权限
AOP 方法调用 日志、事务

四、总结一句话

Java 拦截器是一种横切关注点处理机制,用于在请求或方法执行前后统一处理逻辑,而不侵入业务代码。

如果你愿意,我也可以:

  • 用 流程图解释
  • 对比 Spring Boot 拦截器实战
  • 讲 拦截器执行顺序

你想深入哪一块?

向AI问一下细节

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

AI
助
手