Spring全局異常捕獲不生效問題的解決辦法
問題場景:
Spring項目全局異常處理不生效,登錄接口報錯異常信息被直接返回到接口響應中。
問題描述
同事反饋說系統(tǒng)登錄報錯,查看接口響應,堆棧信息直接返回前臺了,Debug代碼發(fā)現(xiàn)全局異常捕獲也沒有生效。

原因分析:
先梳理一下Spring全局異常攔截的邏輯:
一,Spring在org.springframework.web.servlet.DispatcherServlet#doDispatch內(nèi)部方法調(diào)用加了try catch機制,攔截所有Exception異常。

二,DispatcherServlet#processDispatchResult方法內(nèi)部再次調(diào)用了processHandlerException方法。

三,processHandlerException 方法負責在 Spring MVC 中協(xié)調(diào)處理處理器執(zhí)行過程中發(fā)生的異常。它首先清理響應狀態(tài),然后嘗試通過一系列注冊的 HandlerExceptionResolver 找到合適的異常處理策略,并最終返回一個用于渲染錯誤頁面的 ModelAndView 對象,或者在未能妥善處理異常時重新拋出異常。

解決方案:
先確定異常類型,再檢查異常拋出位置。
- BadSqlGrammarException異常的祖先類繼承了Exception,所以DispatcherServlet#doDispatch方法肯定是可以捕獲該異常的,所以出現(xiàn)問題的原因就在于該異??赡芪唇?jīng)過doDispatch方法。
- 檢查代碼報錯邏輯是在org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter方法中。
- Sevlet容器定義的組件執(zhí)行順序有filter -> servlet -> interceptor -> Controller。
- 所以在filter層拋出的異常,理論上只能在filter層解決,最簡單的方式就是定義一個order靠前的ExceptionFilter來捕獲后續(xù)filter異常。另外也可以基于Tomcat容器來配置全局異常消除:
- 在server.xml中添加一個ErrorReportValve,將showReport設置為false就隱藏了詳細報錯信息,showServerInfo設置為false是隱藏Tomcat版本信息。
\<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
以上就是Spring全局異常捕獲不生效問題的解決辦法的詳細內(nèi)容,更多關于Spring全局異常捕獲不生效的資料請關注腳本之家其它相關文章!
相關文章
Java使用正則表達式截取重復出現(xiàn)的XML字符串功能示例
這篇文章主要介紹了Java使用正則表達式截取重復出現(xiàn)的XML字符串功能,涉及java針對xml字符串及指定格式字符串的正則匹配相關操作技巧,需要的朋友可以參考下2017-08-08
springboot?ElasticSearch如何配置自定義轉換器ElasticsearchCustomConver
這篇文章主要介紹了springboot?ElasticSearch如何配置自定義轉換器ElasticsearchCustomConversions問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
fasterxml jackson反序列化時對于非靜態(tài)內(nèi)部類報錯問題及解決
這篇文章主要介紹了fasterxml jackson反序列化時對于非靜態(tài)內(nèi)部類報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Java getResource()如何獲取class文件目錄位置
這篇文章主要介紹了Java getResource()如何獲取class文件目錄位置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
SpringBoot中統(tǒng)計方法耗時的七種實現(xiàn)方式小結
作為開發(fā)者,我們經(jīng)常需要統(tǒng)計方法的執(zhí)行時間,以便找出性能瓶頸,優(yōu)化系統(tǒng)響應速度,今天分享在SpringBoot框架中實現(xiàn)方法耗時統(tǒng)計的幾種方法,大家可以根據(jù)需求自行選擇2025-03-03

