zoukankan      html  css  js  c++  java
  • SpringMVC的拦截器

     1.首先我们需要引入jar包,这就不用说了,

      定义自己的拦截器实现HandlerInterceptor,进行方法的重写。

      

      2.配置web.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!--中央调度器-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
             
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
            </init-param>
            <!-- TOmcat启动的时候,Servlet对象就存储到内存 正整数 -->
            <load-on-startup>1</load-on-startup>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>

      3.配置一个处理器controller

      4.定义大配置applicationContext.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- 包扫描器 -->
    <context:component-scan base-package="cn.hq.controller"></context:component-scan>
     
        <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
                <bean class="cn.hq.interceptor.MyInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>

    注意:现在拦截器的方法里第一个方法的返回值为false

    效果演示:

    请求后我们会发现控制台输出一个字段

    正是因为我们设置了它的返回值类型,故请求打道回府,黯然收场,他需要我们来解封他。

    当把他解封后(true),再次请求:

    再附上一张图:

    方法解析:

      第一个方法preHandle尤其重要,他可以根据返回值

      改变请求往下的流程,起着先导作用,第二个方法posHandle,他可以在

      请求通过处理器后,紧接着做一系列的操作,最后经过最后一个方法

      afterCompletion,进行客户端的响应。


    多个拦截器的配置:

    1
    2
    3
    4
    5
    6
    7
    8
    <!-- 定义多个拦截器 -->
     
    <mvc:interceptors>
    <mvc:interceptor>
    <mvc:mapping path="/**"/>
        <bean class="cn.hq.interceptor.MyInterceptor2"></bean>
    </mvc:interceptor>
    </mvc:interceptors>

    测试步骤,多配置一个拦截器

    测试案例1,开启第一道拦截器,改为true,第二道拦截器进行false,查看请求流程:

    多个拦截器请求流程图:

    解释:结合上述图所示,他经过第一道拦截器时,通道开放,往下继续走,当他走到第二道拦截时,发现通道关闭了,

         但还是走了二道通道的第一方法,完了请求在这停止,无法通过处理器,但是第一道拦截器已经开启了其通道,

         故走了最终响应的afterCompletion方法。

    测试案例2,开启第一道拦截器,改为false,第二道拦截器进行true,查看请求流程:

    解释:根据流程图,走完第一个方法后,停止前进。

    测试案例3,两道通道全部打开,查看请求流程:


    生活有时就是如此,它在关上你一扇门之前,定会为你开启另外一扇,只是在这个过程中,我们需要经过重重考验,才能通过通道,实现自己的目标。

  • 相关阅读:
    注释神器
    Q币直充-迅银渠道商(php 面向对象类)
    rsync 同步多台服务器项目目录
    wdcp 打开网页显示 Apache 2 Test Page powered by CentOS -- 来自辉哥博客
    elasticsearch批量修改,批量更新某个字段
    Ik分词器没有使用---------elasticsearch-analysis-ik 5.6.3分词问题
    spring-boot-starter-data-elasticsearch 整合elasticsearch 5.x详解
    FastJson--SerializerFeature.PrettyFormat 如何实现格式化源码查看
    由Premature end of Content-Length delimited message body因发的问题排查
    JVM的YoungGC日志查看
  • 原文地址:https://www.cnblogs.com/aeexiaoqiang/p/6525982.html
Copyright © 2011-2022 走看看