springmvc的拦截器

拦截器用于对某些请求的拦截,譬如登录校验。
一、单个拦截器
1、配置myspring-servlet.xml文件

<!-- 配置拦截器 -->
<mvc:interceptors>
  <bean class="interceptor.FirstInterceptor"></bean>
</mvc:interceptors>

<!--或者,可以指定拦截路径-->
<mvc:interceptors>
  <mvc:interceptor>
    <mvc:maping path="/interceptor"></mvc:maping>
    <bean class="interceptor.FirstInterceptor"></bean>
  </mvc:interceptor>
</mvc:interceptors>

2、创建自定义拦截类,实现HandlerInterceptor接口

package interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class FirstInterceptor implements HandlerInterceptor{

    /*
     * 在目标方法之前被调用
     * 如果返回true,则继续调用后续的拦截器和目标方法
     * 如果返回false,则不会执行后续的拦截器和目标方法
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object obj) throws Exception {
        System.out.println("first:preHandle");
        return true;
    }

    /*
     * 调用目标方法之后,渲染视图之前被地调用
     */
    @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,Object obj, ModelAndView mv) throws Exception {
        System.out.println("first:postHandle");
    }

    /*
     * 渲染视图之后被调用,通常用于释放资源
     */
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object obj, Exception exception)
            throws Exception {
        System.out.println("first:afterCompletion");
    }

}

这时候,任意一个请求都被该拦截器拦截。如果preHandle返回false的话,目标方法不被执行了。

二、多个拦截器
1、配置myspring-servlet.xml文件
方法同上,只是多了几个bean。

<!-- 配置拦截器 -->
    <mvc:interceptors>
      <bean class="interceptor.FirstInterceptor"></bean>
      <bean class="interceptor.SecondInterceptor"></bean>
      <bean class="interceptor.ThirdInterceptor"></bean>
    </mvc:interceptors>

2、创建几个自定义拦截类
1)执行顺序:根据配置顺序,preHandle方法正序执行,其余两个方法反序执行。
2)根据配置顺序,第一个preHandle方法返回false的拦截器之前的拦截器会执行preHandle方法和afterHandle方法,而当前拦截器只执行preHandle方法,后续拦截器不执行任何方法。

猜你喜欢

转载自blog.csdn.net/jaybill/article/details/52718773