有天上飞的概念,就要有落地的实现git
- 概念十遍不如代码一遍,朋友,但愿你把文中全部的代码案例都敲一遍
- 先赞后看,养成习惯
SpringBoot 图文教程系列文章目录面试
本文内容数组
拦截器是Spring中的概念,和过滤器相似,能够对用户请求进行拦截过滤处理。可是相对于过滤器而言,拦截器要的控制更加的细节,拦截器能够在三个地方进行执行。jsp
整个工做过程以下图ide
需求:在项目中建立一个UserController,而后在UserController的先后使用拦截器打印一些信息
因此首先咱们开发一个UserControllerpost
拦截器使用的开发步骤学习
- 建立拦截器类
- 注册拦截器 配置拦截规则
/** * @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 最后执行"); } }
@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。这个对象在SpringMvc中是一个关键对象,能够进行参数传递和路径跳转。url
ModelAndView
向request做用域存入数据:mav.addObject("做用域数据的name",值);
设置跳转路径:mav.setViewName("跳转方式:/目标资源url-pattern");
做用: model做用+跳转路径的做用spapublic 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("/**"); }
关于多个拦截器的执行顺序设置
以上就是SpringBoot中拦截器的简单使用。
恭喜你完成了本章的学习,为你鼓掌!若是本文对你有帮助,请帮忙点赞,评论,转发,这对做者很重要,谢谢。
让咱们再次回顾本文的学习目标
- 掌握SpringBoot中拦截器的使用
要掌握SpringBoot更多的用法,请持续关注本系列教程。
下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,但愿你可以成热打铁,将知识夯扎实。
上期自测面试题答案,见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
本次需求:
练习文中demo
上期自测实现项目小案例答案,见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes