springMVC 自定义拦截器

来源:互联网 发布:魏强斌 知乎 编辑:程序博客网 时间:2024/05/16 12:17

文章摘抄至 http://exceptioneye.iteye.com/blog/1303842

 

一、拦截器的配置

   1、传统的配置

<beanclass="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>

 

2、基于注解的配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"><!-- 国际化 --><bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"><property name="basename" value="message" /></bean><bean id="localeResolver"class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /><!--Spring3.1开始的注解 HandlerMapping --><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /><!--Spring3.1开始的注解 HandlerAdapter --><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><!--线程安全的访问session --><property name="synchronizeOnSession" value="true" /></bean><!-- ViewResolver 视图解析类 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 数据源 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property><property name="url"><!-- <value>jdbc:mysql://127.0.0.1:3306/myspring</value> --><value>jdbc:mysql://172.16.14.81:3306/myspring</value></property><property name="username"><value>root</value></property><property name="password"><value>admin</value></property></bean><!-- 指明操作数据库的配置文件位置 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="configLocation"value="classpath:../config/mybatis/MyBatis-Configuration.xml"></property></bean><!-- 使用事物处理 --><bean id="tm"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><tx:annotation-driven transaction-manager="tm" /><!-- 拦截器 -->      <mvc:interceptors>          <!-- 多个拦截器,顺序执行 -->          <mvc:interceptor>             <mvc:mapping path="/user/*" />           <!-- 如果不配置或/*,将拦截所有的Controller -->             <bean class="adtec.userManager.controller.MyInterceptor"></bean>          </mvc:interceptor>      </mvc:interceptors> </beans>

 

 

二、拦截器类

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() */@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {// TODO Auto-generated method stublog.info("==============执行顺序: 1、preHandle================");String url=request.getRequestURL().toString();          if(mappingURL==null || url.matches(mappingURL)){  request.getRequestDispatcher("/msg.jsp").forward(request, response);return false;         }  return true;}//在业务处理器处理请求执行完成后(执行完controller对应的方法之后),生成视图之前执行的动作 @Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// TODO Auto-generated method stublog.info("==============执行顺序: 2、postHandle================");}/** * 在DispatcherServlet完全处理完请求后被调用  *  *   当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion() */@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {// TODO Auto-generated method stublog.info("==============执行顺序: 3、afterCompletion================");}}

 

 

0 0