SpringMVC由淺入深實(shí)用教程-SpringMVC核心技術(shù)(下篇)

多個(gè)攔截器的執(zhí)行
項(xiàng)目:interceptor2。在項(xiàng)目 interceptor 基礎(chǔ)上修改。
(1)?再定義一個(gè)攔截器

(2)?多個(gè)攔截器的注冊與執(zhí)行

(3)?控制臺(tái)執(zhí)行結(jié)果

當(dāng)有多個(gè)攔截器時(shí),形成攔截器鏈。攔截器鏈的執(zhí)行順序,與其注冊順序一致。需要再次強(qiáng)調(diào)一點(diǎn)的是,當(dāng)某一個(gè)攔截器的 preHandle()方法返回true 并被執(zhí)行到時(shí),會(huì)向一個(gè)專門的方法棧中放入該攔截器的 afterCompletion() 方法。
多個(gè)攔截器中方法與處理器方法的執(zhí)行順序如下圖:
?
從圖中可以看出,只要有一個(gè)preHandle()方法返回false,則上部的執(zhí)行鏈將被斷開,其后續(xù)的處理器方法與postHandle()方法將無法執(zhí)行。但,無論執(zhí)行鏈執(zhí)行情況怎樣,只要方法棧中有方法,即執(zhí)行鏈中只要有 preHandle()方法返回true,就會(huì)執(zhí)行方法棧中的afterCompletion()方法。最終都會(huì)給出響應(yīng)。
換一種表現(xiàn)方式,也可以這樣理解:

權(quán)限攔截器舉例
只有經(jīng)過登錄的用戶方可訪問處理器,否則,將返回“無權(quán)訪問”提示。本例的登錄,由一個(gè)JSP 頁面完成。即在該頁面里將用戶信息放入session中。也就是說,只要訪問過該頁面,就說明登錄了。沒訪問過,則為未登錄用戶。
項(xiàng)目:interceptor_permission。在項(xiàng)目 interceptor1 基礎(chǔ)上修改。
(1)?修改 index?頁面

(2)?定義 Controller

(3)?定義 welcome?頁面

(4)?定義權(quán)限攔截器
當(dāng)preHandle()方法返回false?時(shí),需要使用 request?或 response?對請求進(jìn)行響應(yīng)。

(5)?定義 fail?頁面

(6)?注冊權(quán)限攔截器

(7)?定義 login?頁面

(8)?定義 logout?頁面

(9)?項(xiàng)目測試
Step1:在地址欄先直接提交system.do 請求

Step2:訪問login.jsp,進(jìn)行用戶登錄

Step3:再次提交system.do 請求

Step4:訪問logout.jsp,進(jìn)行用戶退出

Step5:三次提交system.do 請求

最后奉上視頻教程??,視頻觀看效果更佳??!走過路過別忘素質(zhì)三連哦~~

