在Spring Boot中,拦截器(Interceptor)是另一种用于在请求被处理之前和之后执行代码的机制。与Servlet Filter相比,拦截器是Spring MVC框架的一部分,它提供了更细粒度的控制,特别是针对Spring MVC的Controller层。拦截器可以访问Spring的依赖注入(DI)功能,因此可以轻松地与Spring管理的bean进行交互。
定义拦截器
要定义一个拦截器,你需要实现HandlerInterceptor接口,该接口包含三个方法:preHandle、postHandle和afterCompletion。
preHandle:在Controller方法调用之前执行。如果返回false,则中断请求处理,不会继续调用后续的拦截器和Controller方法。
postHandle:在Controller方法调用之后,但在视图渲染之前执行(如果请求处理的结果是视图的话)。
afterCompletion:在整个请求处理完成之后执行,包括视图渲染和所有过滤器之后。主要用于资源清理工作。
注册拦截器
要注册拦截器,你需要实现WebMvcConfigurer接口(或继承WebMvcConfigurerAdapter类,但在Spring 5.0及更高版本中,WebMvcConfigurerAdapter已被标记为过时),并重写addInterceptors方法。
以下是一个简单的拦截器定义和注册的示例:
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax