SpringMVC構建全域性異常處理器

2021-09-12 00:14:03 字數 1795 閱讀 4633

springmvc提供全域性異常處理器進行統一的異常處理,乙個系統只能有乙個異常處理器。

系統的dao、service、controller層出現異常的時候都throws exception向上拋,最後由springmvc前端控制器交由異常處理器進行異常處理(對異常進行包裝處理)。如下如所示:

如上圖所示,如果沒有全域性異常處理器,不管是dao層、service層還是controller層出現異常時,會直接將異常資訊返回到客戶端,而這些異常資訊不經過包裝,可能會包含專案的包名、sql查詢語句、資料庫的ip資訊等,這將會造成嚴重的安全隱患。惡意使用者可以通過傳送不正確的查詢語句時,從異常資訊中提取可以危害到服務端安全的資訊,造成服務端出現安全威脅。

如下是我模擬的乙個服務端異常

當使用者訪問服務端經過這個語句時,會出現除數為0的異常,當不設定全域性異常處理器時,客戶端得到的異常資訊如下圖所示:

如紅線部分所示,這會暴露服務端的包名,檔案結構資訊。這是乙個安全隱患。

因此我們需要統一的異常處理器,在異常資訊返回客戶端之前,對異常資訊進行包裝,展示必要的資訊。異常處理器的功能就是對異常資訊進行重新包裝,再返回給springmvc前端控制器。

異常處理器的實現就是要實現類handlerexceptionresolver,並重寫其中的resolveexception方法。

將詳細的異常資訊在服務端日誌中列印,為服務端程式設計師檢視異常緣由。

採用jackson格式對異常資訊進行包裝,只展示了異常狀態碼和簡單的異常型別。

@component

//這個註解會將異常處理類註冊到spring中

//詳細的異常資訊在日誌中列印,讓服務端程式設計師從中找出異常緣由。

modelandview modelandview =

newmodelandview

(new()

);//採用jackson格式對異常資訊進行包裝

modelandview.

addobject

("status"

, responsecode.error.

getcode()

);modelandview.

addobject

("msg"

,"介面出現異常,詳情請檢視服務端日誌");

modelandview.

addobject

("data"

,e.tostring()

);//展示簡單的異常型別,而不是詳細資訊

return modelandview;

}}

如下圖所示,上述的除數為0的異常經過異常處理器包裝後,展現在前端的異常資訊如下,只展示了簡單的異常資訊。

springMVC全域性異常類

對於controller層出現的異常,我們可以專門寫個exceptioncontroller類來管理 首先在別的controller層寫個異常 controller public class admincontroller 然後再寫個exceptioncontroller來進行處理 package ...

SpringMVC全域性異常配置

在專案的開發過程中經常會出現各式各樣的報錯,在專案上線後呢,我們是不希望客戶直接看到我們的報錯的,因為在報錯信 息中包含著我們專案開發的包資訊以及哪個方法呼叫出錯的內容。所以在這裡,我們可以使用springmvc進行全域性異常處理,將異常進行包裝後返回modelandview給客戶。首先我們要將sp...

SpringMVC全域性異常處理

第一種方式 controlleradvice exceptionhandler 該類必須被spring容器掃瞄到,可以根據具體的異常具體處理 restcontrolleradvice public class exceptionhandler serverresponse是封裝的返回給前端的類 js...