Java?SpringMVC實現(xiàn)自定義攔截器
SpringMVC實現(xiàn)自定義攔截器
1 攔截器(interceptor)的作用
Spring MVC 的攔截器類似于 Servlet 開發(fā)中的過濾器 Filter,用于對處理器進行預處理和后處理。
將攔截器按一定的順序聯(lián)結(jié)成一條鏈,這條鏈稱為攔截器鏈(InterceptorChain)。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調(diào)用。攔截器也是AOP思想的具體實現(xiàn)。
2 攔截器和過濾器區(qū)別
關于interceptor和filter的區(qū)別,如圖所示:

3.實現(xiàn)過程
步驟分析:
1.創(chuàng)建攔截器類實現(xiàn)HandlerInterceptor接口
2.配置攔截器
3.測試攔截器的攔截效果
3.1創(chuàng)建攔截器類實現(xiàn)HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor {
/**
* preHandle: 在目標方法執(zhí)行之前 進行攔截 return false:不放行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle1....");
return true;
}
/**
* postHandle: 在目標方法執(zhí)行之后,視圖對象返回之前,執(zhí)行的方法
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle1....");
}
/**
* afterCompletion:在流程都執(zhí)行完成后,執(zhí)行的方法
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion1....");
}
}
3.2配置攔截器
<!-- 配置攔截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--對哪些資源執(zhí)行攔截操作 path="/**"表示對controller層所有方法進行攔截 -->
<mvc:mapping path="/**" />
<bean class="com.weihong.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
3.3測試攔截器的攔截效果
@RequestMapping("/target")
public String targetMethed(){
System.out.println("目標方法執(zhí)行了");
return "interceptor";
}
3.4編寫jsp頁面
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>success~~~~~~</h3>
<% System.out.println("視圖執(zhí)行了....");%>
</body>
</html>
3.5測試結(jié)果

4. 攔截器鏈
開發(fā)中攔截器可以單獨使用,也可以同時使用多個攔截器形成一條攔截器鏈。開發(fā)步驟和單個攔截器是一樣的,只不過注冊的時候注冊多個,注意這里注冊的順序就代表攔截器執(zhí)行的順序。
同上,再編寫一個MyHandlerInterceptor2操作,測試執(zhí)行順序:
<!--配置攔截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--攔截器路徑配置-->
<mvc:mapping path="/**"/>
<!--自定義攔截器類-->
<bean class="com.lagou.interceptor.MyInterceptor1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<!--攔截器路徑配置-->
<mvc:mapping path="/**"/>
<!--自定義攔截器類-->
<bean class="com.lagou.interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
5. 知識小結(jié)
攔截器中的方法說明如下:

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
基于SpringBoot創(chuàng)建Web頁面并熱更新的操作步驟
SpringBoot是一個用于快速開發(fā)單個微服務的框架,它基于 Spring 框架,簡化了Spring應用的初始化過程和開發(fā)流程,本文給大家介紹了如何基于SpringBoot創(chuàng)建Web頁面并熱更新,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11
Java實現(xiàn)樹形結(jié)構(gòu)管理的組合設計模式
Java組合模式是一種結(jié)構(gòu)型設計模式,它允許將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得用戶可以使用統(tǒng)一的方式處理單個對象和對象組合,從而簡化了系統(tǒng)的設計和維護2023-04-04
Spring?boot2.0?實現(xiàn)日志集成的方法(3)
這篇文章主要介紹了Spring?boot2.0?實現(xiàn)日志集成的方法,基于上一篇將日志信息根據(jù)類別輸出到不同的文件中,這篇文章將通過日志來監(jiān)控用戶的操作行為、請求的耗時情況,針對耗時久的請求進行性能分析,提升系統(tǒng)性能,需要的小伙伴可以參考一下2022-04-04
使用?EasyCode生成springboot+mybatis基礎程序的實現(xiàn)示例
本文主要介紹了使用?EasyCode生成springboot+mybatis基礎程序的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01

