詳解SpringMVC的攔截器參數(shù)及攔截器鏈配置
一、攔截器參數(shù)
前置處理
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle..."); return true; }
參數(shù):
■ request:請求對象
■ response:響應(yīng)對象
■ handler:被調(diào)用的處理器對象,本質(zhì)上是一個方法對象,對反射技術(shù)中的Method對象進(jìn)行再包裝
返回值:
■ 返回值為false,被攔截的處理器將不執(zhí)行
后置處理
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle..."); }
參數(shù):
modeAanView:如果處理器執(zhí)行完成具有返回結(jié)果,可以讀取到對應(yīng)數(shù)據(jù)與頁面信息,并進(jìn)行調(diào)整
完成后處理
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion..."); }
參數(shù):
ex:如果處理器執(zhí)行過程中出現(xiàn)異常對象,可以針對異常情況進(jìn)行單獨(dú)處理
二、攔截器鏈配置
配置第一個攔截器
@Component //定義攔截器類,實(shí)現(xiàn)HandlerInterceptor接口 //注意當(dāng)前類必須受Spring容器控制 public class ProjectInterceptor implements HandlerInterceptor { @Override //原始方法調(diào)用前執(zhí)行的內(nèi)容 //返回值類型可以攔截控制的執(zhí)行,true放行,false終止 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String contentType = request.getHeader("Content-Type"); HandlerMethod hm = (HandlerMethod)handler; System.out.println("preHandle..."+contentType); return true; } @Override //原始方法調(diào)用后執(zhí)行的內(nèi)容 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle..."); } @Override //原始方法調(diào)用完成后執(zhí)行的內(nèi)容 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion..."); } }
配置第二個攔截器
@Component public class ProjectInterceptor2 implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle...222"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle...222"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion...222"); } }
當(dāng)配置多個攔截器時(shí),形成攔截器鏈
@Configuration @ComponentScan({"com.itheima.controller"}) @EnableWebMvc //實(shí)現(xiàn)WebMvcConfigurer接口可以簡化開發(fā),但具有一定的侵入性 public class SpringMvcConfig implements WebMvcConfigurer { @Autowired private ProjectInterceptor projectInterceptor; @Autowired private ProjectInterceptor2 projectInterceptor2; @Override public void addInterceptors(InterceptorRegistry registry) { //配置多攔截器 registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*"); registry.addInterceptor(projectInterceptor2).addPathPatterns("/books","/books/*"); } }
三個攔截器構(gòu)成的攔截器鏈圖例
攔截器鏈的運(yùn)行規(guī)律參照攔截器添加順序?yàn)闇?zhǔn)
當(dāng)攔截器中出現(xiàn)對原始處理器的攔截,后面的攔截器均終止運(yùn)行
當(dāng)攔截器運(yùn)行中斷,僅運(yùn)行配置在前面的攔截器的afterCompletion操作
以上就是詳解SpringMVC的攔截器參數(shù)及攔截器鏈配置的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC攔截器配置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
RestTemplate響應(yīng)中如何獲取輸入流InputStream
這篇文章主要介紹了RestTemplate響應(yīng)中如何獲取輸入流InputStream問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01Java 高并發(fā)九:鎖的優(yōu)化和注意事項(xiàng)詳解
本文主要介紹Java高并發(fā)鎖的優(yōu)化和注意事項(xiàng),這里整理了詳細(xì)的資料,并講解了 1. 鎖優(yōu)化的思路和方法 2. 虛擬機(jī)內(nèi)的鎖優(yōu)化 3. 一個錯誤使用鎖的案例 4. ThreadLocal及其源碼分析等知識,有需要的小伙伴可以參考下2016-09-09spring的構(gòu)造函數(shù)注入屬性@ConstructorBinding用法
這篇文章主要介紹了關(guān)于spring的構(gòu)造函數(shù)注入屬性@ConstructorBinding用法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12解決SpringBoot整合ElasticSearch遇到的連接問題
這篇文章主要介紹了解決SpringBoot整合ElasticSearch遇到的連接問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08java開發(fā)hutool HttpUtil網(wǎng)絡(luò)請求工具使用demo
這篇文章主要為大家介紹了hutool之HttpUtil網(wǎng)絡(luò)請求工具使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07mybatis 實(shí)現(xiàn)多條update同時(shí)執(zhí)行
這篇文章主要介紹了mybatis 實(shí)現(xiàn)多條update同時(shí)執(zhí)行,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01從字節(jié)碼角度解析synchronized和反射實(shí)現(xiàn)原理
這篇文章主要介紹了從字節(jié)碼角度解析synchronized和反射的實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08