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

    如果有多个拦截器,执行的顺序是在SpringMVC的配置文件里的前后顺序。

    <mvc:interceptors>
      <bean class="com.neuedu.interceptor.Inteceptor1"></bean>
      <mvc:interceptor>
        <mvc:mapping path="/test"/>
        <bean class="com.neuedu.interceptor.Inteceptor2"></bean>
      </mvc:interceptor>
    </mvc:interceptors>

    第一个拦截器在前面就先执行第一个拦截器的preHandle方法。

    第一个拦截器

    package com.neuedu.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 Inteceptor1 implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            // TODO Auto-generated method stub
            System.out.println("first-preHandle");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("first-postHandle");
            
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("first-afterCompletion");
            
        }
    
    }

    这样第二个拦截器:

    package com.neuedu.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 Inteceptor2 implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            // TODO Auto-generated method stub
            System.out.println("second-preHandle");
            return false;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("second-postHandle");
            
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("second-afterCompletion");
            
        }
    
    }

    请求的方法:

    @Controller
    public class BController {
        @RequestMapping(value="/test")
        public void test(){
    //        
            System.out.println("目标方法执行");
            
            
        }
    }

    执行的结果:

    first-preHandle
    second-preHandle
    目标方法执行
    second-postHandle
    first-postHandle
    second-afterCompletion
    first-afterCompletion

    结果说明多拦截器的顺序是:

     先执行第一拦截器的preHandle

    然后第二个拦截器的preHandle

    目标方法的方法

    第二个拦截器的postHandle

    第一个拦截器的postHandle

    第二个拦截器的afterCompletion

    第一个拦截器的afterCompletion

  • 相关阅读:
    outlook的签名导致新邮件使用签名时产生ActiveX警告。
    Insecure.Org 2006年度的安全工具调查
    理解windows网络/netbios/SMB/CIFS
    hp 笔记本 sata native mode安装xp
    repadmin查看活动目录内的对象属性
    Schema Object Identifiers OIDs
    普通用户设置显示DPI没有权限
    在两个页面间翻转设置Animation动作的一些总结
    Xcode3.2.6异常调试,快速定位出错行
    (转)用NSDateFormatter调整时间格式的代码
  • 原文地址:https://www.cnblogs.com/xuesheng/p/7425874.html
Copyright © 2011-2022 走看看