說明:
Spring MVC 的處理器攔截器類似于 Servlet 開發(fā)中的過濾器 Filter壮吩,用于對(duì)處理器進(jìn)行預(yù)處理和后處理。
作用:
用戶可以自己定義一些攔截器來實(shí)現(xiàn)特定的功能。例:訪問特定頁面前驗(yàn)證用戶是否登陸等
攔截器鏈:
談到攔截器,還要向大家提一個(gè)詞——攔截器鏈(Interceptor Chain)近她。攔截器鏈就是將攔截器按一定的順序聯(lián)結(jié)成一條鏈。在訪問被攔截的方法或字段時(shí)膳帕,攔截器鏈中的攔截器就會(huì)按其之前定義的順序被調(diào)用粘捎。
攔截器與過濾器的區(qū)別:
說到這里,可能大家腦海中有了一個(gè)疑問危彩,這不是我們之前學(xué)的過濾器嗎攒磨?是的它和過濾器是有幾分相似,但是也有區(qū)別汤徽,接下來我們就來說說他們的區(qū)別:
1)娩缰、過濾器是 servlet 規(guī)范中的一部分, 任何 java web 工程都可以使用谒府。
? ? ? ?攔截器是 SpringMVC 框架自己的拼坎,只有使用了 SpringMVC 框架的工程才能用。
2)完疫、過濾器在 url-pattern 中配置了/*之后泰鸡,可以對(duì)所有要訪問的資源攔截谤辜。
? ? ? ?攔截器它是只會(huì)攔截訪問的控制器方法缅糟,如果訪問的是 jsp, html,css,image 或者 js 是不會(huì)進(jìn)行攔截的序调。
攔截器鏈執(zhí)行流程圖:
SpringMVC自定義攔截器使用步驟:
? ? ? ? 1)、自定義攔截器;
? ? ? ? ? ? SpringMVC為我們提供了攔截器規(guī)范的接口,創(chuàng)建一個(gè)類實(shí)現(xiàn)HandlerInterceptor ,重寫接口中的抽象方法;
? ? ? ? ? ? 抽象方法介紹:
? ? ? ? ? ? ? ? ? ? 1)余舶、preHandle方法:在調(diào)用處理器之前調(diào)用該方法蹦锋,如果該方法返回true則請(qǐng)求繼續(xù)向下進(jìn)行,否則請(qǐng)求不會(huì)繼續(xù)向下進(jìn)行,處理器也不會(huì)調(diào)用;
? ? ? ? ? ? ? ? ? ? 2)欧芽、postHandle方法:在調(diào)用完處理器后調(diào)用該方法;
? ? ? ? ? ? ? ? ? ? 3)莉掂、afterCompletion方法:只要該攔截器中的preHandle方法返回true,該方法就會(huì)被調(diào)用;
? ? ? ? 2)千扔、在SpringMVC核心配置文件中注冊(cè)自定義攔截器;
<mvc:interceptors>
????????????<mvc:interceptor>
????????????????????<mvc:mapping path="/**" /><!-- 用于指定對(duì)攔截的 url -->
????????????????????<mvc:exclude-mapping path=""/><!-- 用于排除指定的 url-->
? ????????????<!-- 使用指定的攔截器進(jìn)行對(duì)指定的url進(jìn)行攔截-->
? ? ? ? ? ? <bean? id="handlerInterceptorDemo1"? class="攔截器所對(duì)應(yīng)的全限定類名"></bean>
? ? ? ? ? ? </mvc:interceptor>
</mvc:interceptors>