一、拦截器基础
在开发中,我们常遇到需要强制登录校验的场景。如果直接在每个 Controller 方法里写 Session 判断,不仅代码冗余,一旦逻辑变更,所有接口都得改,前端也得跟着调整。有没有更优雅的方式?答案是:拦截器。
拦截器是 Spring 提供的非侵入式组件,能在请求抵达目标逻辑前或后自动执行通用处理(如鉴权、日志)。它就像业务流程中的关卡,无需修改业务代码即可控制请求流向。

没有拦截器时,请求直接进 Controller;有了拦截器,流程变为:请求 → 拦截器前置 → Controller → Service → 拦截器后置 → 完成 → 响应。
1.1 核心生命周期
实现 HandlerInterceptor 接口并重写三个关键方法:
@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
// 目标方法执行前,返回 true 放行,false 中断
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("LoginInterceptor 目标方法执行前执行..");
return true;
}
// Controller 执行后,视图渲染前
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("LoginInterceptor 目标方法执行后执行");
}
// 整个请求完成后,无论是否异常
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) Exception {
log.info();
}
}


