激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - Java教程 - 阿里四面之Spring Exception的原理解析

阿里四面之Spring Exception的原理解析

2022-02-27 15:25JavaEdge. Java教程

本文給大家介紹阿里四面之Spring Exception的原理解析,本文通過錯誤場景分析給大家詳細介紹Spring異常處理流程,感興趣的朋友一起看看吧

錯誤場景

阿里四面之Spring Exception的原理解析

驗證請求的Token合法性的Filter。Token校驗失敗時,直接拋自定義異常,移交給Spring處理:

阿里四面之Spring Exception的原理解析 阿里四面之Spring Exception的原理解析 阿里四面之Spring Exception的原理解析

測試HTTP請求:

阿里四面之Spring Exception的原理解析

日志輸出如下:說明IllegalRequestExceptionHandler未生效。

阿里四面之Spring Exception的原理解析

why?這就需要精通Spring異常處理流程了。

 

解析

阿里四面之Spring Exception的原理解析

當(dāng)所有Filter被執(zhí)行完畢,Spring才會處理Servlet相關(guān),而DispatcherServlet才是整個Servlet處理核心,它是前端控制器設(shè)計模式,提供 Spring Web MVC 的集中訪問點并負(fù)責(zé)職責(zé)的分派。

在這,Spring處理了請求和處理器的對應(yīng)關(guān)系及統(tǒng)一異常處理

Filter內(nèi)異常無法被統(tǒng)一處理,就是因為異常處理發(fā)生在 DispatcherServlet#doDispatch()

阿里四面之Spring Exception的原理解析

但此時,過濾器已全部執(zhí)行完

Spring異常統(tǒng)一處理 ControllerAdvice如何被Spring加載并對外暴露? WebMvcConfigurationSupport#handlerExceptionResolver()

實例化并注冊一個ExceptionHandlerExceptionResolver 的實例

阿里四面之Spring Exception的原理解析

最終按下圖調(diào)用棧,Spring 實例化了ExceptionHandlerExceptionResolver類。

阿里四面之Spring Exception的原理解析

ExceptionHandlerExceptionResolver實現(xiàn)了InitializingBean

阿里四面之Spring Exception的原理解析

重寫 afterPropertiesSet()

阿里四面之Spring Exception的原理解析

 

initExceptionHandlerAdviceCache

完成所有 ControllerAdvice 中的ExceptionHandler 初始化:查找所有 @ControllerAdvice 注解的 Bean,把它們放入exceptionHandlerAdviceCache。這里即指自定義的IllegalRequestExceptionHandler

阿里四面之Spring Exception的原理解析 阿里四面之Spring Exception的原理解析

所有被 @ControllerAdvice 注解的異常處理器,都會在 ExceptionHandlerExceptionResolver 實例化時自動掃描并裝載在其exceptionHandlerAdviceCache。

initHandlerExceptionResolvers

當(dāng)?shù)谝淮握埱蟀l(fā)生時,DispatcherServlet#initHandlerExceptionResolvers() 將獲取所有注冊到 Spring 的 HandlerExceptionResolver 實例(ExceptionHandlerExceptionResolver正是),存到handlerExceptionResolvers

阿里四面之Spring Exception的原理解析 阿里四面之Spring Exception的原理解析

ControllerAdvice如何被Spring消費并處理異常? DispatcherServlet doDispatch()

阿里四面之Spring Exception的原理解析

執(zhí)行用戶請求時,當(dāng)查找、執(zhí)行請求對應(yīng)的 handler 過程中異常時:

會把異常值賦給 dispatchException再移交 processDispatchResult() processDispatchResult

阿里四面之Spring Exception的原理解析

當(dāng)Exception非空時,繼續(xù)移交

processHandlerException

阿里四面之Spring Exception的原理解析

從 handlerExceptionResolvers 獲取有效的異常解析器以解析異常。

這里的 handlerExceptionResolvers 一定包含聲明的IllegalRequestExceptionHandler#IllegalRequestException 的異常處理器的 ExceptionHandlerExceptionResolver 包裝類。

 

修正

為利用到 Spring MVC 的異常處理機制,改造Filter:

手動捕獲異常將異常通過 HandlerExceptionResolver 進行解析處理

據(jù)此,修改 PermissionFilter,注入 HandlerExceptionResolver:

阿里四面之Spring Exception的原理解析

然后,在 doFilter 捕獲異常并移交 HandlerExceptionResolver:

阿里四面之Spring Exception的原理解析

現(xiàn)在再用錯誤 Token 請求,日志輸出如下:

阿里四面之Spring Exception的原理解析

響應(yīng)體:

阿里四面之Spring Exception的原理解析

到此這篇關(guān)于阿里四面之Spring Exception的原理解析的文章就介紹到這了,更多相關(guān)Spring Exception原理內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_33589510/article/details/120916273

延伸 · 閱讀

精彩推薦
397
主站蜘蛛池模板: 一级黄色在线免费观看 | av国产免费 | 久久国产一级片 | 国产做爰全免费的视频黑人 | 毛片一级免费看 | 久久成人国产精品 | 黄色免费在线网址 | 娇妻被各种姿势c到高潮小说 | 成年人视频免费 | 免费看日韩av | 日本不卡一区在线观看 | 91社影院在线观看 | 成人性生活视频在线观看 | 国产亚洲欧美一区久久久在 | 国产九色视频在线观看 | 国产精品免费av一区二区三区 | 九一免费版在线观看 | 国产亚洲黑人性受xxxx精品 | 午夜视频色| 一区二区久久 | 亚洲第一男人天堂 | 黄在线免费看 | 免费毛片视频 | 在线观看91精品 | 免费一级毛片在线播放不收费 | 精品三级内地国产在线观看 | 亚洲第一色婷婷 | 亚洲一区二区成人 | 久草在线综合 | 在线91视频 | 国产精品久久国产精麻豆96堂 | 成人午夜淫片a | 亚洲va久久久噜噜噜久牛牛影视 | 一级毛片免费观看在线 | 毛片免费在线观看视频 | 欧美中文字幕一区二区三区亚洲 | 国内精品久久久久久久星辰影视 | 国产精选在线 | 久久亚洲成人 | 色偷偷一区 | 久久精品79国产精品 |