springMvc 中mvc:interceptor拦截器详解

来源:互联网 发布:linux 运行rpm文件 编辑:程序博客网 时间:2024/06/02 02:39
现在我们主要对mvc:interceptors标签进行介绍,它的注册过程以及在访问时的拦截过程
接口HandlerInterceptor,它有三个方法:


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


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView 
modelAndView) throws Exception {
    }


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception 
ex) throws Exception {
    }


在正常情况下,对于preHandle就是在处理函数之前先执行,然后在执行处理函数。接着执行postHandle,最后执行afterCmpletion
,afterCompletion无论是否出错肯定是要执行的,而postHandle则不是,不一定执行。
接下来我们写一个类继承HandleInterceptor来进行实验:LoginInterceptor如下:

public class LoginInterceptor implements HandlerInterceptor {

    private static final Logger LOGGER = LoggerFactory.getLogger(LoginInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws 
    Exception {
        System.out.println("preHandle");  
        return super.preHandle(request, response, handler);  
    }


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView 
     modelAndView) throws Exception {
         System.out.println("postHandle");  
        super.postHandle(request, response, handler, modelAndView);
    }


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception 
     ex) throws Exception {
           System.out.println("afterCompletion");  
        super.afterCompletion(request, response, handler, ex); 
         
    }
}


该接口的基本内容说完了,接下来看一下它的配置说明:
<mvc:interceptors path-matcher="xxx">  
        <mvc:interceptor>  
            <mvc:mapping path="xxx"/>  
            <mvc:exclude-mapping path="xxxx"/>  
            <bean class="xxxx"></bean>  
        </mvc:interceptor>  
        <bean class="com.lg.mvc.interceptor.LoginInterceptor" />  
    </mvc:interceptors>  

       其实在mvc:interceptors标签中,有两种类型的配置,一种直接配置一个bean(bean和ref归为一类),另一种还要配置上拦截的路
径和排除的路径,直接配置的bean那就代表对所有的请求进行拦截,而对于mvc:interceptor则代表有着更精细的控制。
      而mvc:interceptor的属性path-matcher则表示配置一个自定义的PathMatcher,它主要用来处理路径的匹配规则,默认采取的
PathMatcher为AntPathMatcher,具有ant风格的路径规则,如?表示任何单字符,*表示0个或多个字符,**表示0个或多个目录。
 其中:mvc:mapping 拦截器路径配置         mvc:exclude-mapping 拦截器不需要拦截的路径 

0 0