StringBoot拦截器接口使用

StringBoot拦截器接口使用

一.拦截器接口HandlerInterceptor

HandlerInterceptor是SpringMVC的拦截器接口
StringBoot拦截器接口使用_第1张图片

二.拦截器接口的三个方法

  • preHandle:预处理回调方法,在Handler执行前执行,第三个参数为处理器(Controller实现);
    返回值:
    • true表示继续流程(如调用下一个拦截器或处理器);
    • false表示流程中断(如登录检查失败),不会继续调用其他或处理器;
  • postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前)
  • afterCompletion:整个请求处理完毕回调方法,即视图渲染完毕回调

当然这个接口还有一个适配器类:HandlerInterceptorAdapter,对三个方法进行了空实现。我们可以有选择的重写想要实现的方法。

三.自定义拦截器

public class MyInterceptor1 implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception{
        System.out.println("*********拦截器前置处理方法");
        //这里返回true,代表放行,如果是false,流程中断。不再执行后续的Controller中的方法了
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView) throws Exception{
         System.out.println("*********拦截器后置处理方法,能看到view"+modelAndView.getViewName());
    }
    @Override
    public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) throws Exception{
        System.out.println("*********拦截器完成后处理方法");
    }
}

四.正式开始教如何使用拦截器

1.首先创建一个interceptor文件夹专门装拦截器

StringBoot拦截器接口使用_第2张图片

/*
* 自定义拦截器实现一个日志记录
* */
public class MyInterceptor implements HandlerInterceptor {
    private static final Logger log = LoggerFactory.getLogger(MyInterceptor.class);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("preHandle method is running");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.debug("postHandle method is running");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.debug("afterCompletion method is running");
    }
}

2.再回到config文件夹下创建拦截器的Java配置

StringBoot拦截器接口使用_第3张图片

//当Spring扫描到这个注解以后,就会执行addInterceptors方法
@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //第一步添加拦截器new MyInterceptor()
        //第二步配置映射路径   addPathPatterns("/**")   /**表示拦截所有
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");  //添加拦截器
    }
}

3.接下来更厉害的是lambok的另一个牛皮的地方

每次编写private static final Logger log = LoggerFactory.getLogger(MyInterceptor.class);感觉很烦
可以直接将MyInterceptor.class写成这样

/*
* 自定义拦截器实现一个日志记录
* */
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
    //将Logger那条语句删除,直接在类上添加@Slf4j注解(@Slf4j自动给你生成一个名叫log的对象)
    preHandle()...
    postHandle()...
    afterCompletion()...
}

你可能感兴趣的:(SpringBoot,拦截器)