`

springmvc 拦截器

 
阅读更多

转:http://ch-space.iteye.com/blog/501081

 

一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可以实现Bean预处理、后处理。 
Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度。 
Spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。他有三个方法: 

Java代码  收藏代码
  1. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)  
  2.         throws Exception {  
  3.         return true;  
  4.     }  
  5.     public void postHandle(  
  6.             HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)  
  7.             throws Exception {  
  8.     }  
  9.     public void afterCompletion(  
  10.             HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)  
  11.             throws Exception {  
  12.     }  


分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面) 
在preHandle中,可以进行编码、安全控制等处理; 
在postHandle中,有机会修改ModelAndView; 
在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。 

如果基于xml配置使用Spring MVC,可以利用SimpleUrlHandlerMapping、BeanNameUrlHandlerMapping进行Url映射(相当于struts的path映射)和拦截请求(注入interceptors),如果基于注解使用Spring MVC,可以使用DefaultAnnotationHandlerMapping注入interceptors。注意无论基于xml还是基于注解,HandlerMapping bean都是需要在xml中配置的。 

一个demo: 
在这个例子中,我们假设UserController中的注册操作只在9:00-12:00开放,那么就可以使用拦截器实现这个功能。 

Java代码  收藏代码
  1. public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {  
  2.     private int openingTime;  
  3.     private int closingTime;  
  4.     private String mappingURL;//利用正则映射到需要拦截的路径  
  5.     public void setOpeningTime(int openingTime) {  
  6.         this.openingTime = openingTime;  
  7.     }  
  8.     public void setClosingTime(int closingTime) {  
  9.         this.closingTime = closingTime;  
  10.     }  
  11.     public void setMappingURL(String mappingURL) {  
  12.         this.mappingURL = mappingURL;  
  13.     }  
  14.     @Override  
  15.     public boolean preHandle(HttpServletRequest request,  
  16.             HttpServletResponse response, Object handler) throws Exception {  
  17.         String url=request.getRequestURL().toString();  
  18.         if(mappingURL==null || url.matches(mappingURL)){  
  19.             Calendar c=Calendar.getInstance();  
  20.             c.setTime(new Date());  
  21.             int now=c.get(Calendar.HOUR_OF_DAY);  
  22.             if(now<openingTime || now>closingTime){  
  23.                 request.setAttribute("msg""注册开放时间:9:00-12:00");  
  24.                 request.getRequestDispatcher("/msg.jsp").forward(request, response);  
  25.                 return false;  
  26.             }  
  27.             return true;  
  28.         }  
  29.         return true;  
  30.     }  
  31. }  


xml配置: 

Xml代码  收藏代码
  1. <bean id="timeBasedAccessInterceptor" class="com.spring.handler.TimeBasedAccessInterceptor">  
  2.     <property name="openingTime" value="9" />  
  3.     <property name="closingTime" value="12" />  
  4.     <property name="mappingURL" value=".*/user\.do\?action=reg.*" />  
  5. </bean>  
  6. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  
  7.     <property name="interceptors">  
  8.         <list>  
  9.             <ref bean="timeBasedAccessInterceptor"/>  
  10.         </list>  
  11.     </property>  
  12. </bean>  


这里我们定义了一个mappingURL属性,实现利用正则表达式对url进行匹配,从而更细粒度的进行拦截。当然如果不定义mappingURL,则默认拦截所有对Controller的请求。 

UserController: 

Java代码  收藏代码
  1. @Controller  
  2. @RequestMapping("/user.do")  
  3. public class UserController{  
  4.     @Autowired  
  5.     private UserService userService;  
  6.     @RequestMapping(params="action=reg")  
  7.     public ModelAndView reg(Users user) throws Exception {  
  8.         userService.addUser(user);  
  9.         return new ModelAndView("profile","user",user);  
  10.     }  
  11.     // other option ...  
  12. }  


这个Controller相当于Struts的DispatchAction 

你也可以配置多个拦截器,每个拦截器进行不同的分工。

分享到:
评论

相关推荐

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...

    springMVC拦截器项目

    SpringMVC 拦截器项目是一个典型的 Web 应用开发示例,它利用 SpringMVC 框架中的拦截器(Interceptor)机制来实现特定的功能,如权限控制、日志记录、性能统计等。SpringMVC 是 Spring 框架的一部分,专为构建基于 ...

    SpringMVC拦截器源代码.zip

    这个名为“SpringMVC拦截器源代码.zip”的压缩包可能包含了Spring MVC拦截器的实现源码,这对于理解和学习如何自定义拦截器以增强应用功能非常有帮助。 1. **拦截器的基本概念** - 拦截器是AOP(面向切面编程)的...

    SpringMVC拦截器

    ### SpringMVC拦截器 #### 一、拦截器概述 拦截器(Interceptor)是一种轻量级、低侵入式的AOP实现方式,在SpringMVC框架中有着广泛的应用。它主要用于处理那些与业务逻辑无关但又频繁出现的功能需求,如日志记录...

    SpringMvc 拦截器

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现通用的功能,如权限验证、日志记录、性能统计等,避免在每个控制器方法中重复编写...

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能访问特定的受保护资源。 首先,我们来看一下实验的基本步骤: 1. 创建 `User` 类:这是表示用户...

    SpringMVC 拦截器 实现 登录退出功能

    综上所述,本项目是一个适合初学者了解和实践SpringMVC拦截器功能的小程序。通过学习和实践,你可以掌握如何使用拦截器实现登录验证和安全退出,同时加深对Intelli IDEA的使用理解。在实际应用中,拦截器常用于权限...

    SpringMVC拦截器源码.rar

    SpringMVC拦截器是基于AOP(面向切面编程)的概念实现的,它们遵循HandlerInterceptor接口。这个接口定义了三个方法: 1. `preHandle`: 在请求被处理器处理之前调用,返回`true`表示继续执行处理器,`false`则中断...

    SpringMVC拦截器实现登录认证

    SpringMVC拦截器是实现登录认证的一种常见方法,它允许开发者在请求被实际处理之前或之后执行特定的逻辑。本文将深入探讨如何利用SpringMVC拦截器来实现这一功能。 首先,了解SpringMVC的核心组件是必要的。...

    SpringMVC拦截器例子详解

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现通用的功能,如权限验证、日志记录、性能统计等,避免在每个控制器方法中重复代码...

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    在这个过程中,`SessionListener`、持久化`Session`和`Springmvc拦截器`是关键组件,让我们逐一深入探讨。 ### SessionListener `SessionListener`是Java Servlet API中的一个接口,用于监听`HttpSession`事件。...

    SpringMVC拦截器实现单点登录

    SpringMVC 拦截器实现单点登录是一种常见的安全控制机制,主要用于确保在同一时间只有一个用户能够使用同一账号进行操作。这种功能在多用户、多设备登录的环境中尤为重要,可以防止用户账号被盗用或者误操作。 单点...

    springMVC拦截器

    SpringMVC 拦截器是 Spring MVC 框架中的一个重要组成部分,它允许开发者在控制器处理请求之前或之后执行自定义逻辑。拦截器可以用于实现登录检查、权限验证、日志记录、性能监控等多种功能。本文将详细介绍 ...

    11SpringMVC拦截器.md

    11SpringMVC拦截器.md

    springmvc拦截器入门实例.zip

    SpringMVC 拦截器(HandlerInterceptor)是 SpringMVC 框架中的一个重要组成部分,它在请求处理之前、之后以及视图渲染之前执行,提供了预处理和后处理的功能。这个入门实例是为了帮助开发者理解如何在实际项目中...

    SpringMVC拦截器配置及运行流程解析

    SpringMVC拦截器配置及运行流程解析 SpringMVC拦截器是指在SpringMVC框架中,用于拦截和处理请求的组件。拦截器可以在请求处理之前、之后或抛出异常时执行某些操作,例如身份验证、日志记录、异常处理等。SpringMVC...

    springMVC拦截器HandlerInterceptor用法代码示例

    "springMVC拦截器HandlerInterceptor用法代码示例" springMVC拦截器HandlerInterceptor是一种非常重要的技术,它可以帮助我们拦截用户的请求,从而知道页面请求的是哪个class的哪个方法。本文将详细介绍springMVC...

Global site tag (gtag.js) - Google Analytics