文档章节

SpringMVC拦截器简单使用

嘻哈开发者
 嘻哈开发者
发布于 2015/05/23 10:47
字数 1152
阅读 930
收藏 6

一、拦截器的配置

   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. }  

 

 

注意:注释中的说明。

 

完整的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>  


本文转载自:http://exceptioneye.iteye.com/blog/1303842

嘻哈开发者
粉丝 57
博文 122
码字总数 1563
作品 0
广州
程序员
私信 提问
加载中

评论(0)

疯狂Spring Cloud连载(9)——RestTemplate的负载均衡原理

本文节选自《疯狂Spring Cloud微服务架构实战》 京东购买地址:https://item.jd.com/12256011.html 当当网购买地址:http://product.dangdang.com/25201393.html Spring Cloud教学视频:htt...

杨大仙的程序空间
2017/10/18
1K
2
Java 43---SpringMVC框架(1)

导读 1.简介 2.SpringMVC的简单使用 3.SpringMVC传值 4.SpringMVC类型转换器 5.SpringMVC拦截器 简介 SpringMVC是一个搭建MVC结构的框架,类似于struts2 需要jar包 SpringMVC的简单使用 web....

hala-22
2019/05/20
0
0
面试必问的Spring AOP原理、SpringMVC过程

Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。 Sp...

Java干货分享
2018/10/25
320
0
springboot学习(二)——springmvc配置使用

以下内容,如有问题,烦请指出,谢谢 上一篇讲解了springboot的helloworld部分,这一篇开始讲解如何使用springboot进行实际的应用开发,基本上寻着spring应用的路子来讲,从springmvc以及web...

嘻哈开发者
2018/04/26
170
0
使用 Spring 更好地处理 Struts 动作

Struts Recipes 的合著者 George Franciscus 将介绍另一个重大的 Struts 整合窍门 —— 这次是将 Struts 应用程序导入 Spring 框架。请跟随 George,他将向您展示如何改变 Struts 动作,使得...

SeanCai
2010/08/29
201
0

没有更多内容

加载失败,请刷新页面

加载更多

报表设计器比较

vue-smart-widget vue-data-board vue-databoard-java java后台 Datav web_designer

daoos
27分钟前
23
0
分布式协调服务——Zookeeper

Zookeeper常用的应用场景 分布式协调:简单来说就是有人对Zookeeper中的数据做了监听,如果修改了Zookeeper中被监听的数据,Zookeeper反过来就会告诉发起监听的人数据变更。比如在kafka的设计...

长臂猿猴
28分钟前
23
0
rocketmq 顺序消费,消息事物

RocketMQ详解(7)——顺序消费 分布式事务-RocketMQ消息事务设计思路及Demo RabbitMQ、RocketMQ、ActiveMQ 、Kafka 四个分布式消息队列的区别 深入理解RocketMQ的消费者组、队列、Broker,Top...

miaojiangmin
30分钟前
14
0
linux下安装nginx

服务器版本:CentOS7 cd / 回到根目录 1、安装gcc yum install gcc-c++ 2、安装pcre pcre-devel yum install -y pcre pcre-devel 3、安装zlib yum install -y zlib zlib-devel 4、安装Open ......

嘿嘿嘿IT
32分钟前
32
0
在Chrome中禁用同一来源政策 - Disable same origin policy in Chrome

问题: 有什么方法可以在Google的Chrome浏览器上禁用同源策略 ? 解决方案: 参考一: https://stackoom.com/question/D1BT/在Chrome中禁用同一来源政策 参考二: https://oldbug.net/q/D1B...

javail
32分钟前
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部