定义多个拦截器

SpringMVC项目中,如果定义多个拦截器。形成拦截器链。执行顺序与注册顺序一致

<!--声明拦截器对象-->
        <mvc:interceptors>
                <!--第一个拦截器-->
                <mvc:interceptor>
                        <mvc:mapping path="/**"/>
                        <bean class="com.bjpowernode.handle.Myinterceptor"></bean>
                </mvc:interceptor>

                <!--第二个拦截器-->
                <mvc:interceptor>
                        <mvc:mapping path="/**"/>
                        <bean class="com.bjpowernode.handle.Myinterceptor2"></bean>
                </mvc:interceptor>
        </mvc:interceptors>
        
		<!--其中mvc:mapping 表示匹配的请求路径即所需要拦截的路径。
		bean 标签指定的class路径表示创建一个拦截器对象。-->

第一个拦截器

package com.bjpowernode.handle;

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

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

/**
 * 2019/09/03
 */
public class Myinterceptor  implements HandlerInterceptor {


    /**
     *preHandel  表示拦截器执行的方法  handle 表示
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行拦截器的prehandle ---11111111111方法 ");
        //如果返回值是false则整个请求结束
        return true;
    }
                //modelAndView  表示控制器的返回结果
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception {
        System.out.println("执行拦截器的 postHandle ---11111111111方法 ");

        //postHandle  可以修改 modelAndview 结果
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        System.out.println("执行拦截器的afterCompletion ---11111111111方法 ");

    }
}

第二个拦截器

package com.bjpowernode.handle;

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

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


/**
 * 2019/09/03
 */
public class Myinterceptor2 implements HandlerInterceptor {

    /**
     *preHandel  表示拦截器执行的方法  handle 表示
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行拦截器的prehandle ------2222222方法 ");
        return true;
    }
                //modelAndView  表示控制器的返回结果
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception {
        System.out.println("执行拦截器的 postHandle ------2222222方法 ");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        System.out.println("执行拦截器的afterCompletion ------2222222方法 ");

    }
}

其中当我们定义的拦截器中有一个拦截器的preHandle方法的返回值是false时,此时拦截器链会立即停止执行。当preHandle的返回值为false的时候整个请求就结束了。

猜你喜欢

转载自blog.csdn.net/qq_42963930/article/details/102367896