zoukankan      html  css  js  c++  java
  • SpringMVC:详述拦截器

    将堆内存SpringMVC使用拦截器对请求进行拦截处理,以实现特定的功能:

    具体实现:

    1、自定义一个实现HandlerInterceptor接口的类并实现接口中定义的抽象方法(实现了三个方法,分别处理Handler Method方法执行前、执行后以及渲染视图后的操作)

    package com.zzj.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class MyInterceptor implements HandlerInterceptor{
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
         //该方法在Handler Method之前被调用
         
    //作用:常用于实现权限
            System.out.println("preHandle");
            return false;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
         //该方法在Handler Method之后,渲染视图之前
         //
    常用于对请求域中的属性或视图做出修改
            System.out.println("postHandle");
            
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
         //该方法在渲染视图之后被调用

          //作用:常用于释放资源 

            System.out.println("afterCompletion");
        }
        
    }

    2、 配置拦截器

    a、所有请求

    <mvc:interceptors>
        <bean class="com.zzj.interceptor.MyInterceptor"></bean>
    </mvc:interceptors>

    b、特定请求

    <mvc:interceptors>
        <mvc:interceptor>

          <!--

                 mvc:exclude-mapping用于设置不拦截哪些路径的请求;mvc:mapping用于设置拦截哪些路径的请求,如下例子:

                 /userinfo只拦截/userinfo请求,不拦截/userinfo/toView.do请求

                 /userinfo/*拦截/userinfo/xxx请求

             -->

            <mvc:mapping path="/userinfo/*"/>
            <bean class="com.zzj.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

    拦截器的执行过程分析:

    我们在发送一个请求后必定会执行DispatchServlet中的doDispatch方法,而在执行如下方法的顺序我们来分析一下:

    preHandle方法(在Handler Method方法执行前调用。功能举例:校验、实现权限等)

     通过标蓝代码我们可以看到preHandle在Handler Method之前执行,

     mappedHandler.applyPreHandle(processedRequest, response)执行的也就是我们创建的拦截器里的preHandler方法,

    我们可以在该方法里通过返回boolean的值来决定是打回请求(拒绝访问),还是继续执行之后的步骤。

    postHandle方法(在Handler Method方法执行后,渲染视图前调用。功能举例:加签名,印章等)

     

    标蓝部分即postHandlle的执行,可见他在Handler Method之后执行,而在processDispatchResult(该方法里将会进行视图渲染,详见下方法图)之前执行

    afterCompletion方法在渲染视图之后被调用。功能举例:释放资源

     由上方法介绍可知,之后会执行processDispatchResult方法,我们找到该方法,可见render方法,该方法我们在自定义视图的博客中介绍过,是用来进行渲染视图的

    在渲染视图后,才会执行afterCompletion方法

  • 相关阅读:
    jvm详解
    JVM堆外内存
    Guava基本使用
    Mondrian开源OLAP引擎详解
    Java8新特性简明教程
    TCP/IP协议三次握手和四次挥手详解
    Go 方法与函数区别
    Go 通道 Chan 详解
    kylin详细介绍
    计数排序
  • 原文地址:https://www.cnblogs.com/yimengxianzhi/p/12377069.html
Copyright © 2011-2022 走看看