Spring Boot(十六):拦截器Interceptor
拦截器的简介
拦截器(Interceptor)是Spring框架中的概念,它同样适用于Spring Boot,因为Spring Boot是基于Spring框架的。拦截器是一种AOP(面向切面编程)的轻量级实现方式,它允许我们在请求处理之前、请求处理之后及请求完成视图渲染完毕后执行一些自定义逻辑。
拦截器的生命周期
拦截器的生命周期主要包含三个关键方法:
preHandle:在请求到达Controller之前执行,返回true表示继续执行后续处理,返回false表示中断后续处理。通常用于身份验证和授权、日志记录等。
postHandle:在Controller执行之后,视图渲染之前执行。可以对模型数据进行操作或对视图进行处理。
afterCompletion:在整个请求处理完成并且视图渲染完毕后执行,通常用于释放资源或者记录日志。
拦截器的使用
1、定义拦截器
创建一个类实现HandlerInterceptor接口,并实现preHandle、postHandle和afterCompletion方法
@Slf4j
public class AccessInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求到达Controller之前执行
// 可以进行身份验证和授权、日志记录等
log.info("preHandle:{}", System.currentTimeMillis());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
// 在Controller执行之后,视图渲染之前执行
// 可以对模型数据进行处理或对视图进行处理
log.info("postHandle:{}", System.currentTimeMillis());
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
// 在整个请求处理完成并且视图渲染完毕后执行
// 可以进行资源的释放或者记录日志等
log.info("afterCompletion:{}", System.currentTimeMillis());
}
}
2、配置拦截器
创建一个配置类实现WebMvcConfigurer接口,覆盖addInterceptors方法,将拦截器注册到应用程序中
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AccessInterceptor()).addPathPatterns("/**");
}
}
在上述示例中,AccessInterceptor将拦截所有的请求
总结
拦截器主要用于身份验证和授权、日志记录、性能检测、通用行为的处理(如跨域处理、时区信息设置等),通过使用拦截器,我们可以在请求处理的不同阶段插入自定义逻辑,增强应用程序的功能和安全性。