404和500等错误如何使用SpringBoot拦截器进行拦截

  介绍

这篇文章将为大家详细讲解有关404和500等错误如何使用SpringBoot拦截器进行拦截,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

今天给大家介绍一下SpringBoot中拦截器的用法,相比Struts2中的拦截器,SpringBoot的拦截器就显得更加方便简单了。

只需要写几个实现类就可以轻轻松松实现拦截器的功能了,而且不需要配置任何多余的信息,对程序员来说简直是一种福利啊。

废话不多说,下面开始介绍拦截器的实现过程:

第一步:创建我们自己的拦截器类并实现HandlerInterceptor接口。

包example.Interceptor;
  进口javax.servlet.http.HttpServletRequest;
  进口javax.servlet.http.HttpServletResponse;
  进口org.springframework.stereotype.Controller;
  进口org.springframework.web.bind.annotation.RequestMapping;
  进口org.springframework.web.servlet.HandlerInterceptor;
  进口org.springframework.web.servlet.ModelAndView;/* *
  *自定义拦截器1
  *
  * @author林志强(208017534)
  * @create 2016年9月20日
  */@ controller
  公共类ErrorInterceptor实现HandlerInterceptor {/* *
  * preHandle方法是进行处理器拦截用的,顾名思义,该方法将在控制器处理之前进行调用,SpringMVC中的拦截拦截器是链式的,可以同时存在
  *多个拦截器,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的拦截器中的preHandle方法都会在
  *控制方法调用之前调用.SpringMVC的这种拦截器链式结构也是可以进行中断的,这种中断方式是令preHandle的返
  *回值为假,当preHandle的返回值为假的时候整个请求就结束了。
  */@Override
  公共布尔preHandle (HttpServletRequest请求,HttpServletResponse响应对象处理程序)
  抛出异常{
  System.out.println(“祝辞祝辞祝辞MyInterceptor1>在在在在在在在请求处理之前进行调用(控制器方法调用之前)“);
  返回true;//只有返回真实才会继续向下执行,返回假取消当前请求
  }/* *
  *这个方法只会在当前这个拦截器的preHandle方法返回值为true的时候才会执行.postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之
  *后,也就是在控制器的方法调用之后执行,但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操
  *作。这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的拦截拦截器该方法反而会后调用,这跟Struts2里面的拦截器的执行过程有点像,
  *只是Struts2里面的拦截方法中要手动的调用ActionInvocation的调用方法,Struts2中调用ActionInvocation的调用方法就是调用下一个拦截器
  *或者是调用行动,然后要在拦截器之前调用的内容都写在调用调用之前,要在拦截器之后调用的内容都写在调用调用方法之后。
  */@Override
  公共空白postHandle (HttpServletRequest请求,HttpServletResponse响应对象处理程序,
  {ModelAndView ModelAndView)抛出异常
  System.out.println(“祝辞祝辞祝辞MyInterceptor1>在在在在在在请求处理之后进行调用,但是在视图被渲染之前(控制器方法调用之后)“);
  如果(response.getStatus ()==500) {
  modelAndView.setViewName (“/errorpage/500“);
  }else if (response.getStatus ()==404) {
  modelAndView.setViewName (“/errorpage/404“);
  }
  }/* *
  *该方法也是需要当前对应的拦截器的preHandle方法的返回值为真时才会执行。该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行,
  *这个方法的主要作用是用于清理资源的,当然这个方法也只能在当前这个拦截器的preHandle方法的返回值为真时才会执行。
  */@Override
  公共空间afterCompletion (HttpServletRequest请求,HttpServletResponse响应、对象处理程序异常交货)
  抛出异常{
  System.out.println(“祝辞祝辞祝辞MyInterceptor1>在在在在在在在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要是用于进行资源清理工作)“);
  }
  }
  

拦截器实现类中几个函数的作用,以及调用的先后顺序都很明确,我这里就不多介绍了。

第二部:创建一个Java类继承WebMvcConfigurerAdapter,并重写addInterceptors方法。实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)。

包example.configuration;
  进口example.Interceptor.ErrorInterceptor;
  进口example.Interceptor.MyInterceptor2;
  进口org.springframework.context.annotation.Configuration;
  进口org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  进口org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  @ configuration
  公开课MyWebAppConfigurer延伸WebMvcConfigurerAdapter {
  @Override
  公共空间addInterceptors (InterceptorRegistry注册表){//多个拦截器组成一个拦截器链//addPathPatterns用于添加拦截规则//excludePathPatterns用户排除拦截
  注册表。addInterceptor(新ErrorInterceptor ()) .addPathPatterns (“/* *”);
  super.addInterceptors(注册表);
  }
  
  }
  

404和500等错误如何使用SpringBoot拦截器进行拦截