一、背景
系統定義了全局統一異常處理,使用了@RestControllerAdvice注解的方式。
鑒權使用的是JWT,使用filter對token進行解析和驗證。然后突然發現一個問題,就是當token過期時,拋出的異常無法通過全局統一異常處理對外返回,而是返回500。
二、原因
全局統一異常處理只能處理控制器中發生的異常。要在Spring Security過濾器鏈中重用此功能,需要定義過濾器並將其掛鈎到安全配置中。過濾器需要將異常重定向到統一異常處理中。
三、代碼
在filter中注入HandlerExceptionResolver
然后在catch中拋出
之后在GlobalExceptionHandlerAdvice中定義需要處理的異常類型,本文中用的是JwtException
這時便可以跟在業務代碼里面拋出的業務異常一樣處理了。
