`
youyu4
  • 浏览: 440265 次
社区版块
存档分类
最新评论

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、基于注解的配置

<!-- 拦截器 -->
	<mvc:interceptors>
		<!-- 方法一 -->
		<beans:bean id="testInterceptor" class="com.youyu4.interceptor.TestInterceptor"></beans:bean>
		<!-- 方法二 -->
		<mvc:interceptor>
			<mvc:mapping path="/*"/>
			<beans:bean id="testInterceptor" class="com.youyu4.interceptor.TestInterceptor"></beans:bean>
		</mvc:interceptor>
	</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. }  

 完整的spring配置文件

 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.         xmlns:context="http://www.springframework.org/schema/context"  
  5.         xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.         xmlns:util="http://www.springframework.org/schema/util"   
  7.         xsi:schemaLocation="  
  8.           http://www.springframework.org/schema/beans  
  9.           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  10.           http://www.springframework.org/schema/context  
  11.           http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  12.           http://www.springframework.org/schema/mvc      
  13.           http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
  14.           http://www.springframework.org/schema/util   
  15.           http://www.springframework.org/schema/util/spring-util-3.0.xsd">  
  16.       
  17.     <!-- 默认的注解映射的支持 ,它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter   
  18.     <mvc:annotation-driven />  
  19.     -->  
  20.       
  21.     <!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd -->  
  22.     <mvc:resources mapping="/js/**" location="/js/" />  
  23.       
  24.     <!-- 自动扫描注解的Controller -->  
  25.     <context:component-scan base-package="com.wy.controller.annotation" />  
  26.       
  27.     <!-- 处理在类级别上的@RequestMapping注解-->  
  28.     <bean  
  29.         class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >  
  30.         <property name="interceptors">  
  31.            <!-- 多个拦截器,顺序执行 -->  
  32.            <list>  
  33.               <ref bean="commonInterceptor"/>  
  34.            </list>  
  35.         </property>  
  36.     </bean>  
  37.     <!--   
  38.              如果不定义mappingURL,则默认拦截所有对Controller的请求 ;   
  39.              可以使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*);  
  40.     -->  
  41.     <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">  
  42.        <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>  
  43.     </bean>  
  44.           
  45.     <!-- 处理方法级别上的@RequestMapping注解-->  
  46.     <bean  
  47.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >  
  48.         <property name="messageConverters">    
  49.             <util:list id="beanList">    
  50.                 <ref bean="mappingJacksonHttpMessageConverter"/>    
  51.             </util:list>    
  52.         </property>   
  53.     </bean>  
  54.       
  55.     <!--   
  56.               将指定路径的请求直接转到对应的view上,而不需要特定的controller来处理请求 .  
  57.               注意:此处的映射路径是/hello,请求时http://localhost:8080/SpringMVC/hello  
  58.               不能在hello.xxx,而不使用此种方式的映射可以加的,因为web.xml配置的是‘/’              
  59.      -->  
  60.     <mvc:view-controller path="/hello" view-name="hello" />  
  61.        
  62.     <!-- 视图解析器策略 和 视图解析器 -->  
  63.     <!-- 对JSTL提供良好的支持 -->  
  64.     <bean  
  65.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  66.         <!-- 默认的viewClass,可以不用配置  
  67.         <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />  
  68.          -->  
  69.         <property name="prefix" value="/WEB-INF/page/" />  
  70.         <property name="suffix" value=".jsp" />  
  71.     </bean>  
  72.       
  73.     <!-- 处理JSON数据转换的 -->  
  74.     <bean id="mappingJacksonHttpMessageConverter"   
  75.         class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">   
  76.         <!-- 为了处理返回的JSON数据的编码,默认是ISO-88859-1的,这里把它设置为UTF-8,解决有乱码的情况 -->   
  77.         <property name="supportedMediaTypes">    
  78.             <list>    
  79.                   <value>text/html;charset=UTF-8</value>    
  80.             </list>    
  81.         </property>    
  82.     </bean>    
  83.       
  84.     <!-- 拦截器 -->  
  85.     <mvc:interceptors>  
  86.         <!-- 多个拦截器,顺序执行 -->  
  87.         <mvc:interceptor>  
  88.            <mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->  
  89.            <bean class="com.wy.interceptor.CommonInterceptor"></bean>  
  90.         </mvc:interceptor>  
  91.     </mvc:interceptors>  
  92.       
  93.     <!--   
  94.        ResourceBundleViewResolver通过basename所指定的ResourceBundle解析视图名。  
  95.                   对每个待解析的视图,ResourceBundle里的[视图名].class所对应的值就是实现该视图的类。  
  96.                   同样,[视图名].url所对应的值是该视图所对应的URL。  
  97.                   可以指定一个parent view,其它的视图都可以从parent view扩展。  
  98.                   用这种方法,可以声明一个默认的视图。  
  99.        
  100.     <bean id="messageSource"  
  101.         class="org.springframework.context.support.ResourceBundleMessageSource">  
  102.         <property name="basename" value="welcome" />  
  103.     </bean>  
  104.     -->  
  105.       
  106. </beans>  

 

分享到:
评论

相关推荐

    spring mvc拦截器过滤json中的null值

    本教程将详细介绍如何使用Spring MVC的拦截器来实现这一功能。 首先,了解拦截器(Interceptor)在Spring MVC中的角色。拦截器是Spring MVC提供的一种AOP(面向切面编程)特性,允许我们在请求处理之前、之后或者在...

    Spring MVC 拦截器入门例子

    Spring MVC 拦截器是基于Java的Web开发框架Spring MVC中的一个重要组件,它允许开发者在请求被控制器处理之前或之后执行自定义逻辑。拦截器主要用于实现通用功能,如权限验证、日志记录、性能监控等,从而提高代码的...

    spring mvc 拦截器获取请求数据信息.rar

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现权限检查、日志记录、性能统计等多种功能。本压缩包“spring mvc 拦截器获取请求...

    详解Spring MVC拦截器实现session控制

    Spring MVC拦截器是Spring Web框架的一个重要组成部分,它允许开发者在处理请求之前或之后执行自定义的操作,例如权限校验、日志记录等。在本篇文章中,我们详细探讨了如何通过Spring MVC拦截器实现session的控制,...

    spring MVC(新增拦截器demo)

    通过学习这个“spring MVC(新增拦截器demo)”项目,你不仅能够理解Spring MVC拦截器的基本使用,还能掌握如何将拦截器应用于实际的需求场景。拦截器的灵活运用可以大大提高代码的复用性和维护性,使得Spring MVC应用...

    Spring mvc拦截器实现原理解析

    Spring MVC拦截器实现原理解析 Spring MVC拦截器是Spring MVC框架中的一种机制,可以对处理器进行预处理和后处理。它类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些...

    Spring MVC 拦截器实现代码

    Spring MVC 拦截器是Spring MVC框架提供的一种机制,用于在请求被控制器处理之前或之后执行特定操作。拦截器可以用来实现通用的功能,如权限验证、日志记录、性能监控等,避免在每个控制器方法中重复这些逻辑。在...

    Spring MVC拦截器_动力节点Java学院整理

    Spring MVC拦截器 Spring MVC的拦截器是属于HandlerMapping级别的,可以有多个HandlerMapping,每个HandlerMapping可以有自己的拦截器。拦截器是实现了org.springframework.web.servlet.HandlerInterceptor接口或...

    Spring MVC 拦截器 interceptor 用法详解

    Spring MVC 拦截器 interceptor 用法详解 Spring MVC 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的...

    浅析java中 Spring MVC 拦截器作用及其实现

    这篇文章将深入探讨Spring MVC拦截器的作用、实现方式以及其在实际应用中的使用场景,并对比拦截器与过滤器的区别。 首先,让我们来看看如何实现一个Spring MVC拦截器: 1. **编写拦截器类**:你需要创建一个类并...

    在spring-boot工程中添加spring mvc拦截器

    Spring Boot 中添加 Spring MVC 拦截器 在 Spring Boot 工程中添加 Spring MVC 拦截器是实现请求预处理和后处理的一种常见方式。 Spring MVC 的拦截器(Interceptor)不同于 Filter,可以实现请求的预处理和后处理...

    SpringMVCDemo:Spring MVC 框架知识案例

    1.创建第一个 Spring MVC 程序案例 2.Spring MVC @RequestMapping 注解案例 3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 ...14.Spring MVC 拦截器案例 15.Spring MVC 异常处理案例

    spring mvc xml配置拦截器

    下面将详细介绍创建和配置Spring MVC拦截器的步骤。 1. **创建自定义拦截器** 首先,我们需要创建一个实现`HandlerInterceptor`接口的类。这个接口包含三个方法: - `preHandle(HttpServletRequest request, ...

    使用Spring MVC拦截器实现日志记录的方法

    在Spring框架中,MVC拦截器是一种用于对Spring MVC中的请求进行拦截处理的组件。它们在请求处理过程中的某些阶段介入,可以实现诸如日志记录、权限检查、请求处理时间统计等操作。实现日志记录是拦截器使用场景之一...

    Spring MVC拦截器的基本使用方法

    Spring MVC拦截器是在Web应用中对请求进行拦截处理的一种方式,类似于Servlet中的过滤器。Spring MVC拦截器主要用于在控制器(Controller)执行前后进行一些处理工作,如日志记录、权限检查、性能监控等。实现拦截器...

    spring mvc

    在 Spring MVC 中使用拦截器需要以下步骤: 1. **定义拦截器类**:实现 `HandlerInterceptor` 接口或继承 `HandlerInterceptorAdapter` 类。 2. **注册拦截器**:在配置文件中注册拦截器,指定需要拦截的 URL 模式。...

Global site tag (gtag.js) - Google Analytics