码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC 中 HandlerInterceptorAdapter的使用

时间:2015-03-06 14:02:04      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:

概述

第1 部分 拦截器类

第2 部分 拦截器配置

第3 部分 实例

参考

第1 部分 拦截器类

一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可以实现Bean预处理、后处理。 
Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度。 

Spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。他有三个方法:

 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判断是否发生了异常,进行日志记录。 

 

第2 部分 拦截器配置

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

 

基于注解的配置如下:

<mvc:interceptors>        
        <bean class="com.Common.action.PurviewInterceptTest" />
    </mvc:interceptors>

 

第3 部分 实例

/**
 * 拦截器测试
 * 
 * @ClassName: PurviewInterceptTest
 * @author xingle
 * @date 2015-3-6 下午12:02:08
 */
public class PurviewInterceptTest extends HandlerInterceptorAdapter {

    private UrlPathHelper urlPathHelper = new UrlPathHelper();

    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {

        // 获取访问url
        String url = urlPathHelper.getLookupPathForRequest(request);

        String queryString = urlPathHelper.getOriginatingQueryString(request);
        String redirectURL = url;
        if (!StringHelperTools.isEmpty(queryString)) {
            redirectURL = redirectURL + "?" + queryString;
        }
        if (true) {// 测试跳转到其他页面
            response.sendRedirect(request.getContextPath() + "/Login1.html");
            return true;
        }

        return super.preHandle(request, response, handler);

    }

    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            org.springframework.web.servlet.ModelAndView modelAndView)
            throws Exception {
        // 你自己的业务逻辑

        //下面这句话不要动,就这样放着。你在处理你的业务逻辑之后,spring会将你的请求和响应继续往容器传或者往客户端进行传递
        super.postHandle(request, response, handler, modelAndView);
    }

    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // 你自己的业务逻辑

        //下面这句话不要动,就这样放着。你在处理你的业务逻辑之后,spring会将你的请求和响应继续往容器传或者往客户端进行传递
        super.afterCompletion(request, response, handler, ex);
    }

}

 

 


参考:

1.spring mvc拦截器和<mvc:annotation-driven />的详解

 

Spring MVC 中 HandlerInterceptorAdapter的使用

标签:

原文地址:http://www.cnblogs.com/xingele0917/p/4318008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!