1. 程式人生 > >springmvc登入檢查 springmvc自定義攔截器

springmvc登入檢查 springmvc自定義攔截器

  • 先說登入檢查,上圖

可以選擇實現HandlerInterceptor介面,也可以繼承HandlerInterceptorAdapter

在springmvc中配置

攔截器:實現HandlerInterceptor中的幾個方法介紹

自定義配置多個

單個攔截器中和多個攔截器並存時三個方法的執行順序的規律:

若該方法返回的false,則不會繼續執行,為true才會繼續執行下一個方法

  1. 單個攔截器的執行順序:

先定義一個攔截器:Interceptor1.java測試它裡面三個方法的攔截順序

       ======Interceptor1=============preHandle======

       ======Interceptor1=============postHandle======

       ======Interceptor1=============afterCompletion======

  1. 多個攔截器的執行順序:
    1. 兩個攔截器中preHandle方法都返回true時:在配置檔案中配置順序是先1後2

    preHandle:(配置的正序)

        ======Interceptor1=============preHandle======

        ======Interceptor2=============preHandle======

    postHandle:(配置的反序)

        ======Interceptor2=============postHandle======

        ======Interceptor1=============postHandle======

    afterCompletion:(配置的反序)

        ======Interceptor2=============afterCompletion======

       ======Interceptor1=============afterCompletion======

    1. 兩個攔截器中preHandle方法都返回true時:在配置檔案中配置順序是先2後1

preHandle:(配置的正序)

        ======Interceptor2=============preHandle======

        ======Interceptor1=============preHandle======

    postHandle:(配置的反序)

        ======Interceptor1=============postHandle======

        ======Interceptor2=============postHandle======

    afterCompletion:(配置的反序)

        ======Interceptor1=============afterCompletion======

        ======Interceptor2=============afterCompletion======

當都所有攔截器都返回true時,此時總的規律:先開始的後結束。

    1. 中斷流程測試
  1. 讓Interceptor2的preHandle方法返回false時:(配置順序中不是第一個的攔截器

======Interceptor1=============preHandle======

======Interceptor2=============preHandle======

======Interceptor1=============afterCompletion======

    說明:

首先攔截器2的preHandle返回false,它自己的後續方法全部中斷。

其次攔截器1的preHandle返回true,但是它的postHandle也沒有執行,說明postHandle受到所有攔截器的preHandle方法返回值的影響

再次攔截器1的afterCompletion方法卻執行了,說明afterCompletion不受其他攔截器的preHandle方法返回值的影響。

結論:

postHandle受所有攔截器的preHandle執行結果的影響,只有全部preHandle都返回true時才執行

       afterCompletion只受它自己所屬攔截器中preHandle的影響,preHandle返回true時執行。

  1. 讓Interceptor1的preHandle方法返回false時:(配置順序中的第一個攔截器

======Interceptor1=============preHandle======

結論:

配置順序第一個攔截器的preHandle返回了false,則中斷所有後續處理。