一、拦截器
在学习强制登录时,后端程序通常根据 Session 判断用户是否登录。但实现方法较麻烦:需要修改每个接口的处理逻辑和返回结果;接口定义修改后,前端代码也需跟随调整。
有没有更简单的办法?统一拦截所有请求并进行 Session 校验。这里我们学习一种新的解决办法:拦截器。
1.1 什么是拦截器
拦截器是在请求/数据抵达目标处理逻辑前、后自动拦截并执行通用处理(如登录校验、日志记录)的非侵入式代码组件,像业务流程中的统一关卡。
拦截器是 Spring 框架提供的核心功能之一,主要用来拦截用户的请求,在指定方法前后,根据业务需要执行预先设定的代码。
无拦截器流程:请求 → Controller → Service ...
有拦截器流程:请求 → 拦截器前置 → Controller → Service → 拦截器后置 → 拦截器完成 → 响应
总结:拦截器用于拦截用户请求,在目标方法前后执行一段由程序员自定义的代码。
1.2 拦截器的使用
拦截器的使用步骤分为两步:
- 定义拦截器
- 注册配置拦截器
1.2.1 自定义拦截器
实现 HandlerInterceptor 接口,并重写其所有方法。
@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
@Override
// 前置处理(目标方法执行前执行)
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("LoginInterceptor 目标方法执行前执行..");
return true; // 返回 true:放行(执行后续程序);返回 false:拦截(直接终止整个请求流程)
}
@Override
// 后置处理(目标方法执行后执行)
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("LoginInterceptor 目标方法执行后执行");
}
@Override
// 视图渲染后执行
public void Exception {
log.info();
}
}


