SpringBoot图文教程7—SpringBoot拦截器的使用姿式这都有

有天上飞的概念,就要有落地的实现git

  • 概念十遍不如代码一遍,朋友,但愿你把文中全部的代码案例都敲一遍
  • 先赞后看,养成习惯

SpringBoot 图文教程系列文章目录面试

  1. SpringBoot图文教程1「概念+案例 思惟导图」「基础篇上」
  2. SpringBoot图文教程2—日志的使用「logback」「log4j」
  3. SpringBoot图文教程3—「‘初恋’情结」集成Jsp
  4. SpringBoot图文教程4—SpringBoot 实现文件上传下载
  5. SpringBoot图文教程5—SpringBoot 中使用Aop
  6. SpringBoot图文教程6—SpringBoot中过滤器的使用

本文内容
数组

前言

拦截器是Spring中的概念,和过滤器相似,能够对用户请求进行拦截过滤处理。可是相对于过滤器而言,拦截器要的控制更加的细节,拦截器能够在三个地方进行执行。jsp

  • 能够在请求到达Controller控制器以前 经过拦截器执行一段代码
  • 也能够在控制器执行以后,经过拦截器执行一段代码 【此时只是Controller执行完毕 视图尚未开始渲染】
  • 最后在整个请求结束的时候还能够经过拦截器执行一段时间代码

整个工做过程以下图
ide

SpringBoot中拦截器的使用

需求:在项目中建立一个UserController,而后在UserController的先后使用拦截器打印一些信息

因此首先咱们开发一个UserControllerpost

拦截器使用的开发步骤学习

  1. 建立拦截器类
  2. 注册拦截器 配置拦截规则
  1. 建立拦截器类
/**
 * @Component 和 @Service 是一个做用 建立对象
 */
@Component
public class MyInterceptor1 implements HandlerInterceptor {
    Logger logger = LoggerFactory.getLogger(MyInterceptor1.class);

    /**
     * 在请求到达Controller控制器以前 经过拦截器执行一段代码
     * 若是方法返回true,继续执行后续操做
     * 若是返回false,执行中断请求处理,请求不会发送到Controller
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("拦截器1 在控制器执行以前执行");

        return true;
    }

    /**
     * 控制器以后,跳转前
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("拦截器1 在控制器执行以后执行");
    }

    /**
     * 跳转以后执行
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("拦截器1 最后执行");
    }
}
  1. 注册拦截器,配置拦截规则
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Autowired
    private MyInterceptor1 myInterceptor1;

    /**
     * 注册拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * addInterceptor 注册拦截器
         * addPathPatterns 配置拦截规则
         */
        registry.addInterceptor(myInterceptor1)
                .addPathPatterns("/**");
    }
}

细节补充

postHandle方法中ModelAndView参数

在postHandle方法中有一个参数是ModelAndView。这个对象在SpringMvc中是一个关键对象,能够进行参数传递和路径跳转。url

ModelAndView
向request做用域存入数据:mav.addObject("做用域数据的name",值);
设置跳转路径:mav.setViewName("跳转方式:/目标资源url-pattern");
做用: model做用+跳转路径的做用spa

public ModelAndView xxx(ModelAndView mav){
   //1. 向requset做用域存入一个数据
   mav.addObject("name",值);
   //2. 跳转到xxx.jsp
   mav.setViewName("跳转方式:/目标资源url-pattern");
   return mav;
}

经过ModelAndView 咱们能够在 postHandle方法中 操做做用域的值 和 设置修改跳转路径3d

一次性拦截多个路径

在注册拦截器的时候 配置拦截路径的addPathPatterns参数为可变长参数,就意味着能够接受String的数组,能够配置多个参数。

addPathPatterns方法的源码以下

排除拦截路径

注册多个拦截器

咱们能够实现多个拦截器,并依次将他们注册进去

public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor1)
                .addPathPatterns("/**");
        registry.addInterceptor(myInterceptor2)
                .addPathPatterns("/**");
    }

关于多个拦截器的执行顺序设置

  1. 在不作任何设置的时候,多个拦截器的执行顺序和注册的顺序有关,先注册的先执行

  1. 也能够经过Order方法来设置 执行的顺序 值越小越先执行

总结

以上就是SpringBoot中拦截器的简单使用。

恭喜你完成了本章的学习,为你鼓掌!若是本文对你有帮助,请帮忙点赞,评论,转发,这对做者很重要,谢谢。

让咱们再次回顾本文的学习目标

  • 掌握SpringBoot中拦截器的使用

要掌握SpringBoot更多的用法,请持续关注本系列教程。

下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,但愿你可以成热打铁,将知识夯扎实。

自测面试题(答案见下期)

  • 拦截器和过滤器有什么区别?
上期自测面试题答案,见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

自测实现项目小案例(答案见下期)

本次需求:

练习文中demo

上期自测实现项目小案例答案,见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

求关注,求点赞,求转发

相关文章
相关标签/搜索