SpringMVC自定义拦截器详解 (转)

经过一天的奋战,终于会使用了SpringMVC,下面讲下他的拦截器。使用SpringMVC拦截器和Struts2一样,Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。完整的例子可以到我的资源下载:http://download.csdn.net/download/tjcyjd/4255319

HandlerInterceptor接口的代码如下:

package org.springframework.web.servlet;  
import Javax.servlet.http.HttpServletRequest;
import Javax.servlet.http.HttpServletResponse;
public interface HandlerInterceptor {  
     // preHandle()方法在业务处理器处理请求之前被调用
     boolean preHandle(HttpServletRequest request,
HttpServletResponse response,  
     Object handler)
         throws Exception;  
     // postHandle()方法在业务处理器处理请求之后被调用
     void postHandle(  
             HttpServletRequest request, HttpServletResponse
response, Object  
             handler, ModelAndView modelAndView)
             throws Exception;  
     // afterCompletion()方法在DispatcherServlet完全处理完请求后被调用
     void afterCompletion(  
             HttpServletRequest request, HttpServletResponse
response, Object  
             handler, Exception ex)
             throws Exception;  
 
 }

下面对代码中的三个方法进行解释。

preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。

postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回请求前被调用,在该方法中对用户请求request进行处理。

afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。

下面通过一个例子来说明如何使用SpringMVC框架的拦截器。

现在要编写一个拦截器,拦截所有不在工作时间的请求,把这些请求转发到一个特定的静态页面,而不对它们的请求进行处理。

首先编写TimeInterceptor.Java,代码如下:

  1. package com.yjde.web.interceptor;
  2. import java.util.Calendar;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.springframework.web.servlet.ModelAndView;
  6. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
  7. public class TimeInterceptor extends HandlerInterceptorAdapter {
  8. // 继承HandlerInterceptorAdapter类
  9. private int openingTime; // openingTime 属性指定上班时间
  10. private int closingTime; // closingTime属性指定下班时间
  11. private String outsideOfficeHoursPage;// outsideOfficeHoursPage属性指定错误提示页面的URL
  12. // 重写 preHandle()方法,在业务处理器处理请求之前对该请求进行拦截处理
  13. public boolean preHandle(HttpServletRequest request,
  14. HttpServletResponse response, Object handler) throws Exception {
  15. Calendar cal = Calendar.getInstance();
  16. int hour = cal.get(Calendar.HOUR_OF_DAY); // 获取当前时间
  17. if (openingTime <= hour && hour < closingTime) { // 判断当前是否处于工作时间段内
  18. return true;
  19. } else {
  20. response.sendRedirect(outsideOfficeHoursPage); // 返回提示页面
  21. return false;
  22. }
  23. }
  24. }
  1. // 可以看出,上面的代码重载了preHandle()方法,该方法在业务处理器处理请求之前被调用。在该方法中,首先获得当前的时间,判断其是否在
  2. // openingTime和closingTime之间,如果在,返回true,这样才会调用业务控制器去处理该请求;否则直接转向一个页面,返回false,这样该请求就不会被处理。

下面是在dispatcher-servlet.xml中对拦截器进行的配置,代码如下:

  1. <!--
  2. 使Spring支持自动检测组件,如注解的Controller
  3. -->
  4. <context:component-scan base-package="com.yjde.web.controller" />
  5. <bean id="viewResolver"
  6. class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  7. p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
  8. <mvc:interceptors>
  9. <mvc:interceptor>
  10. <!--设置拦截的路径-->
  11. <mvc:mapping path="/login1.htm" />
  12. <mvc:mapping path="/login2.htm" />
  13. <bean class="com.yjde.web.interceptor.TimeInterceptor">
  14. <!--openingTime 属性指定上班时间-->
  15. <property name="openingTime">
  16. <value>12</value>
  17. </property>
  18. <!--closingTime属性指定下班时间-->
  19. <property name="closingTime">
  20. <value>14</value>
  21. </property>
  22. <!--outsideOfficeHoursPage属性指定提示页面的URL-->
  23. <property name="outsideOfficeHoursPage">
  24. <value>http://localhost:8080/SpringMVCInterceptor/jsp/outsideOfficeHours.jsp
  25. </value>
  26. </property>
  27. </bean>
  28. </mvc:interceptor>
  29. </mvc:interceptors>
  30. <bean id="messageSource"
  31. class="org.springframework.context.support.ResourceBundleMessageSource"
  32. p:basename="message">
  33. </bean>

原创:http://blog.csdn.net/tjcyjd/article/details/7498236

时间: 2024-08-01 17:31:43

SpringMVC自定义拦截器详解 (转)的相关文章

struts2内置拦截器和自定义拦截器详解(附源码)

一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截器,拦截器才可以正常的工作和运行.Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现.大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与 拦截器链的配置.内置拦截器虽然在struts2中都定义了,但是并不是都起作用的.因为并不是所有拦截器都被加

SpringMVC拦截器详解[附带源码分析]

目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. Hand

spring--处理器拦截器详解——跟着开涛学SpringMVC

5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   5.1.1.常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时

[转]SpringMVC拦截器详解[附带源码分析]

目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. Hand

SpringMVC拦截器详解

拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. HandlerExecutionChain类 由HandlerMethod和Interceptor集合组成的类,会被HandlerMapping接口的getHandler方法获取. 2. HandlerInterceptor接口 SpringMVC拦截器基础接口. 3. AbstractHandlerMapping Handler

SpringMVC中使用Interceptor拦截器详解

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

拦截器详解

如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器): 这里写一个用户登录拦截的小例子 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. 首先要创建三个jsp页面 分别用于 登录 成功 图书列表

springmvc 自定义拦截器

<mvc:interceptors> <!-- 配置自定义的拦截器 --> <bean class="com.atguigu.springmvc.interceptors.FirstInterceptor"></bean> </mvc:interceptors> <mvc:interceptors> <!-- 配置自定义的拦截器 --> <bean class="com.atguigu.

SpringMvc自定义拦截器

首先在SpringMvc.xml中加入自己定义的拦截器 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/manager/**"/>//拦截改路径的url请求 <bean id="mLoginInterceptor" class="com.usermanage.util.MLoginInterceptor"/> </mvc:int