spring boot(19)-拦截器

来源:互联网 发布:电动牙刷当跳蛋 知乎 编辑:程序博客网 时间:2024/06/17 03:27


动态资源和静态资源

拦截器可以算是aop的一种实现,专门拦截对动态资源的后台请求,也就是拦截对控制层的请求,主要用于判断用户是否有权限请求后台。拦截器不会拦截静态资源,如spring boot的默认静态目录resources/static,请求其目录下的html,js,图片等都不会被拦截。因为我们的业务机密数据都在后台,而前端的静态资源可以分离出来放在静态服务器以缓解后台服务器的压力,不过这不是本篇要讨论的内容。这也是第三篇说用静态html+rest替换动态jsp的原因之一

声明拦截器

[java] view plain copy
  1. public class MyInterceptor implements HandlerInterceptor {  
  2.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){  
  3.         System.out.println("在请求前执行");  
  4.         return true;// 返回true表示拦截通过,返回false拦截不通过,取消当前请求,返回空白  
  5.     }  
  6.     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView){  
  7.         System.out.println("在请求不报异常,顺利完成后执行");  
  8.     }  
  9.     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){  
  10.         System.out.println("无论请求是否异常,最后都会执行。用于清理资源,关闭连接等");  
  11.     }  
  12. }  
只需要实现HandlerInterceptor接口即可,三个方法中只有preHandle方法有返回值,通常就是在这个方法中检查用户的session,判断其是否有权限

配置拦截器

[java] view plain copy
  1. @SpringBootConfiguration  
  2. public class Mvc extends WebMvcConfigurerAdapter {  
  3.     public void addInterceptors(InterceptorRegistry registry) {  
  4.         // addPathPatterns:添加拦截规则    excludePathPatterns: 排除拦截规则  
  5.         registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/error");  
  6.     }  
  7. }     
继承WebMvcConfigurerAdapter说明这是一个spring mvc配置类,重写addInterceptors方法就可以实现拦截器的配置
/**表示所有的请求url,包括子路径。/error是spring boot中的默认处理异常的url,所以排除掉,不拦截它。
另外可以查看WebMvcConfigurerAdapter源码,在这里重写其他方法可以实现其他的mvc相关配置

拦截器和过滤器

有不少人喜欢把拦截器和过滤器拿来比较,上一篇我讲了过滤器,也解释了先有servlet,然后才是spring mvc。同理,首先会执行过滤器,然后才是拦截器。过滤器属于servlet技术,所以可以过滤servlet和spring mvc的请求。而拦截器属于spring,所以只能拦截spring mvc,无法拦截servlet,具体原因我在上一篇结尾已经讲过。至于他们的功能有什么区别,哪个更好,并没有必要纠结。如果项目用了spring,拦截器可以和spring更好的融合,可以自动识别spring boot静态资源。如果项目没有用spring只用了servlet,就肯定用过滤器
原创粉丝点击