在spring-boot工程中添加spring mvc拦截器

  


  

  

Spring MVC的拦截器(拦截器)不是过滤器,同样可以实现请求的预处理,后处理。使用拦截器仅需要两个步骤:

  
      <李>实现拦截器李   <李>注册拦截器李   
  

<强> 1.1实现拦截器
  

  

实现拦截器可以自定义实现HandlerInterceptor接口,也可以通过继承HandlerInterceptorAdapter类,后者是前者的实现类。下面是拦截器的一个实现的例子,目的是判断用户是否登录。如果preHandle方法返回true,则继续后续处理。
  

        公开课LoginInterceptor延伸HandlerInterceptorAdapter {/* *   *预处理回调方法,实现处理器的预处理(如登录检查)。   *第三个参数为响应的处理器,即控制器。   *返回真,表示继续流程,调用下一个拦截器或者处理器。   *返回假,表示流程中断,通过反应产生响应。   */@Override   公共布尔preHandle (HttpServletRequest请求,HttpServletResponse响应,   {对象处理程序)抛出异常   System.out.println (“- - - - - - - - - - - - - - - - - - -preHandle”);//验证用户是否登陆   对象obj=request.getSession () .getAttribute(“用户名”);   如果(obj==null | | ! (obj instanceof字符串)){   response.sendRedirect (request.getContextPath () + "/index . html ");   返回错误;   }   返回true;   }/* *   *当前请求进行处理之后,也就是控制方法调用之后执行,   *但是它会在DispatcherServlet进行视图返回渲染之前被调用。   *此时我们可以通过modelAndView对模型数据进行处理或对视图进行处理。   */@Override   公共空间postHandle (HttpServletRequest请求,HttpServletResponse响应,   对象处理程序,ModelAndView ModelAndView)抛出异常{   System.out.println (“- - - - - - - - - - - - - - - - - - -postHandle”);   }/* *   *方法将在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行。   *这个方法的主要作用是用于进行资源清理工作的。   */@Override   公共空间afterCompletion (HttpServletRequest请求,HttpServletResponse响应,   对象处理程序,异常特异)抛出异常{   System.out.println (“- - - - - - - - - - - - - - - - - - aftercompletion”);   }   }      

<强> 1.2注册拦截器
  

  

为了使自定义的拦截器生效,需要注册拦截器到春容器中,具体的做法是继承WebMvcConfigurerAdapter类,覆盖其addInterceptors (InterceptorRegistry注册表)方法。最后别忘了把Bean注册到春容器中,可以选择@ component或者@ configuration。

        @ component   公开课InterceptorConfiguration延伸WebMvcConfigurerAdapter {   @Override   公共空间addInterceptors (InterceptorRegistry注册表){//注册拦截器   InterceptorRegistration ir=注册表。addInterceptor(新LoginInterceptor ());//配置拦截的路径   ir.addPathPatterns (“/* *”);//配置不拦截的路径   ir.excludePathPatterns (“/* * . html”);//还可以在这里注册其它的拦截器//注册表。addInterceptor(新OtherInterceptor ()) .addPathPatterns (“/* *”);   }   }      

<强> 1.3拦截器的应用场景
  

  

拦截器本质上是面向切面编程(AOP),符合横切关注点的功能都可以放在拦截器中来实现,主要的应用场景包括:

  
      <李>登录验证,判断用户是否登录。   <李>权限验证,判断用户是否有权限访问资源。   <李>日志记录,记录请求日志,以便统计请求访问量。   <李>处理cookie,本地化,国际化,主题等。   <李>性能监控,监控请求处理时长等。   
  


  

  

<强> 2.1工作原理
  

  

拦截器不是过滤器,却实现了过滤器的功能,其原理在于:

  
      <李>所有的拦截器(拦截器)和处理器(处理器)都注册在HandlerMapping中。   <李> Spring MVC中所有的请求都是由DispatcherServlet分发的。   <李>当请求进入DispatcherServlet.doDispatch()时候,首先会得到处理该请求的处理程序(即控制器中对应的方法)以及所有拦截该请求的拦截器。拦截器就是在这里被调用开始工作的。   
  

<强> 2.2拦截器工作流程
  

  

一个拦截器,只有preHandle方法返回真,postHandle, afterCompletion才有可能被执行;如果preHandle方法返回假,则该拦截器的postHandle, afterCompletion必然不会被执行。

在spring-boot工程中添加spring mvc拦截器