Spring boot配置拦截器(十四)

来源:互联网 发布:有没有淘宝卖家骗货 编辑:程序博客网 时间:2024/06/06 01:21

SpringBoot使用拦截器

SpringBoot的拦截器只能拦截流经DispatcherServlet的请求,对于自定义的Servlet无法进行拦截。
SpringMVC中的拦截器有两种:HandlerInterceptor和WebMvcInterceptor。这两个接口都定义了请求之前、请求之中、请求之后三个函数,以HandlerInterceptor为例进行说明:

  • public boolean preHandle(HttpServletRequest req, HttpServletResponse httpServletResponse, Object o)
  • public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)
  • public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)

HandlerInterceptor的函数返回值都是boolean,一旦返回false,就不再处理这个请求,所以它真正具有拦截功能。而WebMvcInterceptor作用只是进行初始化,它的三个函数都是void类型的。


@WebServlet 2 public class ActionInterceptor implements HandlerInterceptor { 3  4     @Override 5     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 6             throws Exception { 7         // System.out.println(">>>MyInterceptor1>>>>>>>在请求处理之前进行调用(Controller方法调用之前)"); 8  9         // 获取系统时间10         Calendar ca = Calendar.getInstance();11         int hour = ca.get(Calendar.HOUR_OF_DAY);12         // 设置限制运行时间 0-4点13         if (hour < 4) {14             return true;15         }16         return false;17     }18 19     @Override20     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,21             ModelAndView modelAndView) throws Exception {22         // System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");23 24     }25 26     @Override27     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)28             throws Exception {29         // System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet30         // 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");31     }32 }

拦截器使用:  关于注解 我使用的是@Component  其实也可能声明成配置

复制代码
 1 @Component 2 public class ApplicationConfig {extends WebMvcConfigurerAdapter  3  4     @Override 5     public void addInterceptors(InterceptorRegistry registry) { 6         // 多个拦截器组成一个拦截器链 7         // addPathPatterns 用于添加拦截规则 8         // excludePathPatterns 用户排除拦截 9         registry.addInterceptor(new ActionInterceptor()).addPathPatterns("/service/extract/json/**");10         super.addInterceptors(registry);11     }12 }

原创粉丝点击