springmvc登入檢查 springmvc自定義攔截器
- 先說登入檢查,上圖
可以選擇實現HandlerInterceptor介面,也可以繼承HandlerInterceptorAdapter
在springmvc中配置
攔截器:實現HandlerInterceptor中的幾個方法介紹
自定義配置多個
單個攔截器中和多個攔截器並存時三個方法的執行順序的規律:
若該方法返回的false,則不會繼續執行,為true才會繼續執行下一個方法
- 單個攔截器的執行順序:
先定義一個攔截器:Interceptor1.java測試它裡面三個方法的攔截順序
======Interceptor1=============preHandle======
======Interceptor1=============postHandle======
======Interceptor1=============afterCompletion======
- 多個攔截器的執行順序:
- 兩個攔截器中preHandle方法都返回true時:在配置檔案中配置順序是先1後2
preHandle:(配置的正序)
======Interceptor1=============preHandle======
======Interceptor2=============preHandle======
postHandle:(配置的反序)
======Interceptor2=============postHandle======
======Interceptor1=============postHandle======
afterCompletion:(配置的反序)
======Interceptor2=============afterCompletion======
======Interceptor1=============afterCompletion======
-
- 兩個攔截器中preHandle方法都返回true時:在配置檔案中配置順序是先2後1
preHandle:(配置的正序)
======Interceptor2=============preHandle======
======Interceptor1=============preHandle======
postHandle:(配置的反序)
======Interceptor1=============postHandle======
======Interceptor2=============postHandle======
afterCompletion:(配置的反序)
======Interceptor1=============afterCompletion======
======Interceptor2=============afterCompletion======
當都所有攔截器都返回true時,此時總的規律:先開始的後結束。
-
- 中斷流程測試
- 讓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時執行。
- 讓Interceptor1的preHandle方法返回false時:(配置順序中的第一個攔截器)
======Interceptor1=============preHandle======
結論:
配置順序第一個攔截器的preHandle返回了false,則中斷所有後續處理。