• springmvc拦截器


    目录

    拦截器:

    拦截器的执行原理

    拦截器的使用步骤:

    拦截器的执行时间:

     拦截器执行的时机

    拦截器实现的两种方式

    HandlerInterceptor接口分析

     拦截器的实现步骤

    拦截器和过滤器的区别


    SpringMVC中的interceptor拦截器,它主要的作用是拦截指定的用户请求,并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行处理器之前。”当然处理器映射器映射出所要执行的处理器类时,已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器。

    拦截器:

    1)拦截器是springmvc中的一种,需要实现HandlerInterceptor接口。
    2)拦截器和过滤器类似,功能方向侧重点不同。 过滤器是用来过滤器请求参数,设置编码字符集等工作。拦截器是拦截用户的请求,做请求做判断处理的。
    3)拦截器是全局的,可以对多个Controller做拦截。 
       一个项目中可以有0个或多个拦截器, 他们在一起拦截用户的请求。
        拦截器常用在:用户登录处理,权限检查, 记录日志。

    一般拦截器被用在:

    日志记录:记录请求信息的日志

    权限检查:如登录检查

    性能检测:检测方法的执行时间

    拦截器的执行原理

    拦截器的使用步骤:


     1.定义类实现HandlerInterceptor接口
     2.在springmvc配置文件中,声明拦截器, 让框架知道拦截器的存在。

     

    拦截器的执行时间:


      1)在请求处理之前, 也就是controller类中的方法执行之前先被拦截。
      2)在控制器方法执行之后也会执行拦截器。
      3)在请求处理完成后也会执行拦截器。

     拦截器执行的时机

    (1)preHandle():在请求被处理之前进行操作

    (2)preHandle():在请求被处理之后,但结果还没有渲染前进行操作,可以改变响应结果

    (3)afterCompletion:所有的请求响应结束后执行善后工作,清理对象,关闭资源

    拦截器实现的两种方式

    1)继承HandlerInterceptorAdapter的父类

    2)实现HandlerInterceptor接口,实现的接口,推荐使用实现接口的方式

    HandlerInterceptor接口分析

    Spring的HandlerMapping支持拦截器,拦截器必须实现HandlerInterceptor接口,此接口里面有下面3中方法:

    1.preHandle()处理器执行前被调用,方法返回true标识继续调用其他拦截器或者处理器,返回false表示中断流程,后续的拦截器和处理器不再执行。

    2.postHandle()处理器执行后,视图执行前调用,此时而已通过ModelAndView对象对数据模型数据进行处理或对视图进行处理。

    3.afterCompletion()整个过程结束后调用,比如性能监控中我们在这里可以记录结束时间并输出消耗的时间,也可以在这里写对资源的清理,但是只有preHandle()返回true时才会执行afterCompletion方法。

     拦截器的实现步骤

    1)改造登录方法,在session中存储用户信息,用于进行权限验证

    2)开发拦截器的功能,实现HandlerInterceptor接口,重写preHandle()方法

    3)在springmvc.xml文件中注册拦截器

     开发权限验证拦截器

     拦截器链

     


    拦截器:看做是多个Controller中公用的功能,集中到拦截器统一处理。使用的aop的思想


    多个拦截器:
    第一个拦截器preHandle=true , 第二个拦截器preHandle=true 

    111111-拦截器的MyInterceptor的preHandle()
    22222-拦截器的MyInterceptor的preHandle()
    =====执行MyController中的doSome方法=====
    22222-拦截器的MyInterceptor的postHandle()
    111111-拦截器的MyInterceptor的postHandle()
    22222-拦截器的MyInterceptor的afterCompletion()
    111111-拦截器的MyInterceptor的afterCompletion()


    第一个拦截器preHandle=true , 第二个拦截器preHandle=false

    111111-拦截器的MyInterceptor的preHandle()
    22222-拦截器的MyInterceptor的preHandle()
    111111-拦截器的MyInterceptor的afterCompletion()


    第一个拦截器preHandle=false , 第二个拦截器preHandle=true|false

    111111-拦截器的MyInterceptor的preHandle()


    拦截器和过滤器的区别

    1.过滤器是servlet中的对象,  拦截器是框架中的对象
    2.过滤器实现Filter接口的对象, 拦截器是实现HandlerInterceptor
    3.过滤器是用来设置request,response的参数,属性的,侧重对数据过滤的。
      拦截器是用来验证请求的,能截断请求。
    4.过滤器是在拦截器之前先执行的。
    5.过滤器是tomcat服务器创建的对象
      拦截器是springmvc容器中创建的对象
    6.过滤器是一个执行时间点。
      拦截器有三个执行时间点
    7.过滤器可以处理jsp,js,html等等
      拦截器是侧重拦截对Controller的对象。 如果你的请求不能被DispatcherServlet接收, 这个请求不会执行拦截器内容
    8.拦截器拦截普通类方法执行,过滤器过滤servlet请求响应

  • 相关阅读:
    使用Kali进行实验---主机发现
    结构性设计模式之装饰器模式
    Jmeter基础篇
    (02)Cartographer源码无死角解析-(17) SensorBridge→里程计数据处理与TfBridge分析
    SQL6 查找学校是北大的学生信息
    C,C++,JAVA的区别与联系
    Matplotlib | 手把手教你绘制官网神图
    并发模型值Actor和CSP
    泰勒公式理解
    数据库连接池
  • 原文地址:https://blog.csdn.net/weixin_48826996/article/details/126120436