1、拦截器介绍
在SpringBoot中,拦截器是一种用于拦截请求并在处理请求之前或之后执行特定操作的机制。
拦截器可以用于实现一些通用的功能,例如身份验证、日志记录、性能监控等。
Springboot中的拦截器是通过实现HandlerInterceptor接口来实现的,该接口定义了三个方法:
(1)preHandle:在请求处理之前调用,可以进行一些前置处理逻辑,如果该方法返回false,则请求将被中断,不再继续处理;
(2)postHandle:在请求处理之后调用,但在试图渲染之前。可以对请求的结果进行进一步的处理或修改;
(3)afterCompletion:在整个请求完成之后调用,包括试图渲染完成,可以进行一些资源清理操作。
2、使用拦截器的基本思路
创建一个类,并实现HandlerInterceptor接口,并重写上述的三个方法,然后再配置类中注册该拦截器。基本代码如下:
(1)拦截器
@Component //该注解是将该拦截器声明为一个Spring组件,以便Springboot能够自动扫描并将其纳入管理。
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在请求处理之前进行拦截处理return true; // 返回true表示继续执行请求,返回false表示中断请求}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在请求处理之后进行拦截处理,但在视图渲染之前}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在整个请求完成之后进行拦截处理,包括视图渲染完成}
}
(2)配置类中注册该拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {//导入拦截器@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 添加拦截器
// registry.addInterceptor(interceptor):该方法用来添加拦截器
// .addPathPatterns("/**"):该方法指定需要拦截的请求路径
// .excludePathPatterns("/login","/register"):该方法可以配置排除路径registry.addInterceptor(myInterceptor).addPathPatterns("/**"); // 拦截所有请求}
}