欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring全局異常捕獲不生效問題的解決辦法

 更新時(shí)間:2024年04月24日 11:27:18   作者:Lvlht  
Spring項(xiàng)目全局異常處理不生效,登錄接口報(bào)錯(cuò)異常信息被直接返回到接口響應(yīng)中,本文給大家介紹了Spring全局異常捕獲不生效問題的解決辦法,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下

問題場(chǎng)景:

Spring項(xiàng)目全局異常處理不生效,登錄接口報(bào)錯(cuò)異常信息被直接返回到接口響應(yīng)中。

問題描述

同事反饋說系統(tǒng)登錄報(bào)錯(cuò),查看接口響應(yīng),堆棧信息直接返回前臺(tái)了,Debug代碼發(fā)現(xiàn)全局異常捕獲也沒有生效。

原因分析:

先梳理一下Spring全局異常攔截的邏輯:

一,Spring在org.springframework.web.servlet.DispatcherServlet#doDispatch內(nèi)部方法調(diào)用加了try catch機(jī)制,攔截所有Exception異常。

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

解決方案:

先確定異常類型,再檢查異常拋出位置。

  1. BadSqlGrammarException異常的祖先類繼承了Exception,所以DispatcherServlet#doDispatch方法肯定是可以捕獲該異常的,所以出現(xiàn)問題的原因就在于該異??赡芪唇?jīng)過doDispatch方法。
  2. 檢查代碼報(bào)錯(cuò)邏輯是在org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter方法中。
  3. Sevlet容器定義的組件執(zhí)行順序有filter -> servlet -> interceptor -> Controller。
  4. 所以在filter層拋出的異常,理論上只能在filter層解決,最簡(jiǎn)單的方式就是定義一個(gè)order靠前的ExceptionFilter來捕獲后續(xù)filter異常。另外也可以基于Tomcat容器來配置全局異常消除:
    • 在server.xml中添加一個(gè)ErrorReportValve,將showReport設(shè)置為false就隱藏了詳細(xì)報(bào)錯(cuò)信息,showServerInfo設(shè)置為false是隱藏Tomcat版本信息。
\<Valve className="org.apache.catalina.valves.ErrorReportValve"
showReport="false"
showServerInfo="false" />

以上就是Spring全局異常捕獲不生效問題的解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Spring全局異常捕獲不生效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論