spring MVC拦截器

一、拦截器的配置

   1、传统的配置

 

Xml代码   收藏代码
  1. <bean  
  2.         class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >  
  3.         <property name="interceptors">  
  4.            <!-- 多个拦截器,顺序执行 -->  
  5.            <list>  
  6.               <ref bean="commonInterceptor"/>  
  7.            </list>  
  8.         </property>  
  9.     </bean>  
  10.     <!--   
  11.               如果不定义mappingURL,则默认拦截所有对Controller的请求 ;   
  12.              可以使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*);  
  13.     -->  
  14.     <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">  
  15.        <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>  
  16.     </bean>  

 

  2、基于注解的配置

 

Xml代码   收藏代码
  1. <!-- 拦截器 -->  
  2.     <mvc:interceptors>  
  3.         <!-- 多个拦截器,顺序执行 -->  
  4.         <mvc:interceptor>  
  5.            <mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->  
  6.            <bean class="com.wy.interceptor.CommonInterceptor"></bean>  
  7.         </mvc:interceptor>  
  8.     </mvc:interceptors>  

 

 

 

 

二、拦截器类

 

Java代码   收藏代码
  1. package com.wy.interceptor;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.apache.log4j.Logger;  
  7. import org.springframework.web.servlet.HandlerInterceptor;  
  8. import org.springframework.web.servlet.ModelAndView;  
  9.   
  10. public class CommonInterceptor implements HandlerInterceptor {  
  11.   
  12.     private Logger log = Logger.getLogger(CommonInterceptor.class);  
  13.       
  14.     public CommonInterceptor() {  
  15.         // TODO Auto-generated constructor stub  
  16.     }  
  17.   
  18.     private String mappingURL;//利用正则映射到需要拦截的路径    
  19.         public void setMappingURL(String mappingURL) {    
  20.                this.mappingURL = mappingURL;    
  21.        }   
  22.   
  23.     /** 
  24.      * 在业务处理器处理请求之前被调用 
  25.      * 如果返回false 
  26.      *     从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 
  27.      *  
  28.      * 如果返回true 
  29.      *    执行下一个拦截器,直到所有的拦截器都执行完毕 
  30.      *    再执行被拦截的Controller 
  31.      *    然后进入拦截器链, 
  32.      *    从最后一个拦截器往回执行所有的postHandle() 
  33.      *    接着再从最后一个拦截器往回执行所有的afterCompletion() 
  34.      */  
  35.     @Override  
  36.     public boolean preHandle(HttpServletRequest request,  
  37.             HttpServletResponse response, Object handler) throws Exception {  
  38.         // TODO Auto-generated method stub  
  39.         log.info("==============执行顺序: 1、preHandle================");  
  40.         String url=request.getRequestURL().toString();    
  41.         if(mappingURL==null || url.matches(mappingURL)){    
  42.             request.getRequestDispatcher("/msg.jsp").forward(request, response);  
  43.             return false;   
  44.         }    
  45.         return true;  
  46.     }  
  47.   
  48.     //在业务处理器处理请求执行完成后,生成视图之前执行的动作   
  49.     @Override  
  50.     public void postHandle(HttpServletRequest request,  
  51.             HttpServletResponse response, Object handler,  
  52.             ModelAndView modelAndView) throws Exception {  
  53.         // TODO Auto-generated method stub  
  54.         log.info("==============执行顺序: 2、postHandle================");  
  55.     }  
  56.   
  57.     /** 
  58.      * 在DispatcherServlet完全处理完请求后被调用  
  59.      *  
  60.      *   当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion() 
  61.      */  
  62.     @Override  
  63.     public void afterCompletion(HttpServletRequest request,  
  64.             HttpServletResponse response, Object handler, Exception ex)  
  65.             throws Exception {  
  66.         // TODO Auto-generated method stub  
  67.         log.info("==============执行顺序: 3、afterCompletion================");  
  68.     }  
  69.   
  70. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值