SpringMVC拦截器配置

<!-- 传统配置 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >
    <property name="interceptors">
       <!-- 多个拦截器,顺序执行 -->
       <list>
          <ref bean="commonInterceptor"/>
       </list>
    </property>
</bean>
<!-- 
  若是不定义mappingURL,则默认拦截全部对Controller的请求 ; 
 可使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*);
-->
<bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">
   <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>
</bean>

<!-- 注解配置 -->
<!-- 拦截器 -->
<mvc:interceptors>
    <!-- 多个拦截器,顺序执行 -->
    <mvc:interceptor>
       <mvc:mapping path="/entryOrJsonController/*" /><!-- 若是不配置或/*,将拦截全部的Controller -->
       <bean class="com.wy.interceptor.CommonInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>


<!-- java代码 -->
package com.wy.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class CommonInterceptor implements HandlerInterceptor {

private Logger log = Logger.getLogger(CommonInterceptor.class);
public CommonInterceptor() {
// TODO Auto-generated constructor stub
}

private String mappingURL;//利用正则映射到须要拦截的路径  
        public void setMappingURL(String mappingURL) {  
               this.mappingURL = mappingURL;  
       } 

/**
* 在业务处理器处理请求以前被调用
* 若是返回false
*     从当前的拦截器往回执行全部拦截器的afterCompletion(),再退出拦截器链
* 若是返回true
*    执行下一个拦截器,直到全部的拦截器都执行完毕
*    再执行被拦截的Controller
*    而后进入拦截器链,
*    从最后一个拦截器往回执行全部的postHandle()
*    接着再从最后一个拦截器往回执行全部的afterCompletion()
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// TODO Auto-generated method stub
log.info("==============执行顺序: 一、preHandle================");
String url=request.getRequestURL().toString();  
        if(mappingURL==null || url.matches(mappingURL)){  
request.getRequestDispatcher("/msg.jsp").forward(request, response);
return false; 
        }  
return true;
}

//在业务处理器处理请求执行完成后,生成视图以前执行的动做 
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
log.info("==============执行顺序: 二、postHandle================");
}

/**
* 在DispatcherServlet彻底处理完请求后被调用 
*   当有拦截器抛出异常时,会从当前拦截器往回执行全部的拦截器的afterCompletion()
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
log.info("==============执行顺序: 三、afterCompletion================");
}

}

<!-- xml配置 -->
<?xml version="1.0" encoding="UTF-8" ?>
        xmlns:context=" http://www.springframework.org/schema/context"
        xmlns:util=" http://www.springframework.org/schema/util
        xsi:schemaLocation="
    
    <!-- 默认的注解映射的支持 ,它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 
    <mvc:annotation-driven />
    -->
    
    <!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,须要从新设置spring-mvc-3.0.xsd -->
    <mvc:resources mapping="/js/**" location="/js/" />
    
    <!-- 自动扫描注解的Controller -->
<context:component-scan base-package="com.wy.controller.annotation" />
<!-- 处理在类级别上的@RequestMapping注解-->
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >
   <property name="interceptors">
      <!-- 多个拦截器,顺序执行 -->
      <list>
         <ref bean="commonInterceptor"/>
      </list>
   </property>
</bean>
<!-- 
        若是不定义mappingURL,则默认拦截全部对Controller的请求 ; 
        可使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*);
-->
<bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">
  <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>
</bean>
<!-- 处理方法级别上的@RequestMapping注解-->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
   <property name="messageConverters">  
          <util:list id="beanList">  
                <ref bean="mappingJacksonHttpMessageConverter"/>  
         </util:list>  
     </property> 
</bean>
<!-- 
         将指定路径的请求直接转到对应的view上,而不须要特定的controller来处理请求 .
         注意:此处的映射路径是/hello,请求时 http://localhost:8080/SpringMVC/hello
         不能在hello.xxx,而不使用此种方式的映射能够加的,由于web.xml配置的是‘/’            
-->
<mvc:view-controller path="/hello" view-name="hello" />
 
<!-- 视图解析器策略 和 视图解析器 -->
<!-- 对JSTL提供良好的支持 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 默认的viewClass,能够不用配置
<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />
-->
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 处理JSON数据转换的 -->
<bean id="mappingJacksonHttpMessageConverter" 
   class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
   <!-- 为了处理返回的JSON数据的编码,默认是ISO-88859-1的,这里把它设置为UTF-8,解决有乱码的状况 --> 
     <property name="supportedMediaTypes">  
        <list>  
             <value>text/html;charset=UTF-8</value>  
          </list>  
     </property>  
</bean>  
<!-- 拦截器 -->
<mvc:interceptors>
   <!-- 多个拦截器,顺序执行 -->
   <mvc:interceptor>
      <mvc:mapping path="/entryOrJsonController/*" /><!-- 若是不配置或/*,将拦截全部的Controller -->
      <bean class="com.wy.interceptor.CommonInterceptor"></bean>
   </mvc:interceptor>
</mvc:interceptors>
    <!-- 
       ResourceBundleViewResolver经过basename所指定的ResourceBundle解析视图名。
                  对每一个待解析的视图,ResourceBundle里的[视图名].class所对应的值就是实现该视图的类。
                  一样,[视图名].url所对应的值是该视图所对应的URL。
                  能够指定一个parent view,其它的视图均可以从parent view扩展。
                  用这种方法,能够声明一个默认的视图。
     
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="welcome" />
</bean>
-->
</beans>

<!--一个拦截器多个mapping path的配置-->
<mvc:interceptor>
<mvc:mapping path="/ads/plan/channel" />
<mvc:mapping path="/ads/plan/keyword" />
<mvc:mapping path="/ads/plan/wordAdd" />
<mvc:mapping path="/ads/plan/save" />
<ref bean="planAgreementInterceptor" />
</mvc:interceptor>


<!——设置spring拦截器若mvc:mapping的path相同则按照配置前后造成拦截器链 ——> 
<mvc:interceptors> <mvc:interceptor> 
<mvc:mapping path="/*" /> 
<bean class="test.interceptor.TestInterceptor1" />
</mvc:interceptor> <mvc:interceptor> 
<mvc:mapping path="/*" /> 
<bean class="test.interceptor.TestInterceptor2" />
</mvc:interceptor>
</mvc:interceptors> 
相关文章
相关标签/搜索