一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - 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的原理解析

當所有Filter被執行完畢,Spring才會處理Servlet相關,而DispatcherServlet才是整個Servlet處理核心,它是前端控制器設計模式,提供 Spring Web MVC 的集中訪問點并負責職責的分派。

在這,Spring處理了請求和處理器的對應關系及統一異常處理

Filter內異常無法被統一處理,就是因為異常處理發生在 DispatcherServlet#doDispatch()

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

但此時,過濾器已全部執行完

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

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

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

最終按下圖調用棧,Spring 實例化了ExceptionHandlerExceptionResolver類。

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

ExceptionHandlerExceptionResolver實現了InitializingBean

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

重寫 afterPropertiesSet()

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

 

initExceptionHandlerAdviceCache

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

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

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

initHandlerExceptionResolvers

當第一次請求發生時,DispatcherServlet#initHandlerExceptionResolvers() 將獲取所有注冊到 Spring 的 HandlerExceptionResolver 實例(ExceptionHandlerExceptionResolver正是),存到handlerExceptionResolvers

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

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

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

執行用戶請求時,當查找、執行請求對應的 handler 過程中異常時:

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

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

當Exception非空時,繼續移交

processHandlerException

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

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

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

 

修正

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

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

據此,修改 PermissionFilter,注入 HandlerExceptionResolver:

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

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

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

現在再用錯誤 Token 請求,日志輸出如下:

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

響應體:

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜剧场1000 | 2019理论韩国理论中文 | 91综合在线视频 | 欧美一级特黄刺激大片视频 | 四虎2023| 欧美日韩精品免费一区二区三区 | 韩剧网3600热播剧 | 香蕉eeww99国产在线观看 | 玩50岁四川熟女大白屁股直播 | 男人边吃奶边做好爽视频免费 | 女人和拘做受全过程免费 | 国内精品露脸在线视频播放 | 成人在线播放视频 | 奇米网在线| 五月婷婷伊人网 | 黑人异族日本人hd | 国产一级毛片国语版 | 波多野结衣无码 | 肉宠文很肉到处做1v1 | 好男人免费高清在线观看2019 | 教室里的激情电影 | 国产精品aaa | 丁香六月色 | 9久热这里只有精品视频在线观看 | 亚洲精品视 | 思思99热久久精品在2019线 | 亚洲视频在线免费 | 午夜福利院电影 | 四虎1515hh.com| 精品国产一级在线观看 | 视频免费观看在线播放高清 | 日韩一区二区三区四区不卡 | 久久久免费热线精品频 | 呜嗯啊野战h呻吟男男双性 污小说在线阅读 | 亚洲精品一区二区观看 | 特黄一级 | 秋霞啪啪片 | 91大神在线观看精品一区 | 呜呜别塞了啊抽插 | 视频一区二区三区在线观看 | 99福利网|