定義多個攔截器

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的時候整個請求就結束了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章