生活随笔
收集整理的這篇文章主要介紹了
【Spring MVC】自定义拦截器 Interceptor
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一.自定義攔截器
1.攔截器,跟過濾器比較像的技術(shù).
1.1 攔截器和過濾器的區(qū)別:
攔截器只能攔Controller,Filter可以攔任何請(qǐng)求
因?yàn)镾pring的入口是dispatcherServlet,只有能通過Filter,才可以走攔截器
攔截器是SpringMVC的技術(shù),只有當(dāng)控制器生效時(shí),攔截器才能生效
如果直接走jsp,不走DispatcherServlet,就走不了攔截器
2.發(fā)送請(qǐng)求時(shí)被攔截器攔截,在控制器的前后添加額外功能.
2.1 跟 AOP 區(qū)分開.AOP 在特定方法前后擴(kuò)充(對(duì)ServiceImpl)
2.2 攔截器,請(qǐng)求的攔截.針對(duì)點(diǎn)是控制器方法.(對(duì)Controller)
3.SpringMVC 攔截器和Filter 的區(qū)別
3.1 攔截器只能攔截器Controller
3.2 Filter 可以攔截任何請(qǐng)求.
4.實(shí)現(xiàn)自定義攔截器的步驟:
4.1 新建類實(shí)現(xiàn)HandlerInterceptor
package cn
.hanquan
.interceptor
;import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;import org
.springframework
.web
.servlet
.HandlerInterceptor
;
import org
.springframework
.web
.servlet
.ModelAndView
;public class DemoInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest arg0
, HttpServletResponse arg1
, Object arg2
) throws Exception
{System
.out
.println("preHandle");return true;}@Overridepublic void postHandle(HttpServletRequest arg0
, HttpServletResponse arg1
, Object arg2
, ModelAndView arg3
)throws Exception
{System
.out
.println("In postHandle, HttpServletRequest = " + arg0
);System
.out
.println("In postHandle, HttpServletResponse = " + arg1
);System
.out
.println("In postHandle, Object = " + arg2
);System
.out
.println("In postHandle, ModelAndView = " + arg3
);System
.out
.println("In postHandle, arg3.getViewName() = " + arg3
.getViewName());System
.out
.println("arg3.getModel().get(\"model\") = " + arg3
.getModel().get("model"));String word
= arg3
.getModel().get("model").toString();String newWord
= word
.replace("祖國", "**");arg3
.getModel().put("model", newWord
);
System
.out
.println("postHandle");}@Overridepublic void afterCompletion(HttpServletRequest arg0
, HttpServletResponse arg1
, Object arg2
, Exception arg3
)throws Exception
{System
.out
.println("In afterCompletion, arg3 = " + arg3
);if (arg3
!= null
) {System
.out
.println("In afterCompletion, Exception = :" + arg3
.getMessage());}}
}
4.2 在springmvc.xml 配置攔截器需要攔截哪些控制器
4.2.1 攔截所有控制器
<mvc:interceptors><bean class="cn.hanquan.interceptor.DemoInterceptor"></bean></mvc:interceptors>
4.2.2 攔截特定的的url
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/interceptor" /><bean class="cn.hanquan.interceptor.DemoInterceptor"></bean></mvc:interceptor></mvc:interceptors>
二. 攔截器棧
多個(gè)攔截器同時(shí)生效時(shí),組成了攔截器棧順序:先進(jìn)后出.執(zhí)行順序和在 springmvc.xml 中配置順序有關(guān)設(shè)置先配置攔截器A,再配置攔截器B,執(zhí)行順序?yàn)?br /> preHandle(A) --> preHandle(B) --> 控制器方法--> postHandle(B)--> postHanle(A) --> JSP --> afterCompletion(B) --> afterCompletion(A)
示例效果
目錄結(jié)構(gòu):
總結(jié)
以上是生活随笔為你收集整理的【Spring MVC】自定义拦截器 Interceptor的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。