最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot對Filter過濾器中的異常進(jìn)行全局處理方案詳解

 更新時間:2023年09月27日 11:11:45   作者:lans_g  
這篇文章主要介紹了SpringBoot對Filter過濾器中的異常進(jìn)行全局處理,在SpringBoot中我們通過 @ControllerAdvice 注解和 @ExceptionHandler注解注冊了全局異常處理器,需要的朋友可以參考下

前言

今天處理攔截器中的異常時,遇到這樣一個問題,我們希望在過濾器中對用戶的請求進(jìn)行判斷,如果不符合要求直接拋出異常并在前端展示。但是如果我們直接在過濾器中throw一個異常時,盡管我們使用@ControllerAdvice和 @ExceptionHandler注解注冊了全局異常處理器,但是前端是無法接收到的。

這是因?yàn)檫^濾器是在進(jìn)入Servlet之前處理請求的,從注解名稱也能看出來@ControllerAdvice是處理Controller層異常的,請求還沒到Controller層,當(dāng)然無法處理了。

那么如何將過濾器中的異常像Controller層一樣進(jìn)行全局處理呢?

一、全局異常處理

首先全局異常處理器還是不可少的,大概像下面這個樣子

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = ServiceException.class)
    @ResponseBody
    public ResponseEntity<AjaxResponse> serviceExceptionHandler(ServiceException e, HttpServletRequest request){
        //...處理一些邏輯
        return new ResponseEntity<>(new AjaxResponse().failure(Constants.ErrorCode.SERVICE_ERROR,e.getMessage()), HttpStatus.BAD_REQUEST);
    }
}

二、處理過濾器中的異常

在我們自定義的Filter類中,使用HandlerExceptionResolver的resolveException方法來進(jìn)行處理,如下面代碼所示

@Component
public class MyFilter implements Filter {
    @Override
    public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //...進(jìn)行一些邏輯處理
        	if (...) {
                HandlerExceptionResolver handlerExceptionResolver = SpringContextUtil.getBean("handlerExceptionResolver");
                handlerExceptionResolver.resolveException((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse,
                        null,new ServiceException("拋出過濾器全局異常!"));
                return;
            }
        filterChain.doFilter(servletRequest, servletResponse);
    }
    @Override
    public void destroy() {
    }
}

這樣就能實(shí)現(xiàn)效果了:

看一下后端返回的響應(yīng)數(shù)據(jù)如下:

接著我們說說HandlerExceptionResolver和它的resolveException方法的原理實(shí)現(xiàn)。

HandlerExceptionResolver 接口是 Spring MVC 提供的全局異常處理機(jī)制的一部分,它的原理基于 Spring MVC 框架的請求處理流程和異常處理機(jī)制。

當(dāng)請求在 Spring MVC 中的某一組件中拋出異常時,異常會沿著請求處理的鏈路向上傳播,直到找到能夠處理異常的地方。通常,異常首先會被容器(例如,Servlet 容器)捕獲,然后傳遞給 Spring MVC 框架。Spring MVC 框架會遍歷已注冊的異常處理器,調(diào)用它們的 resolveException 方法。每個異常處理器有機(jī)會檢查異常類型,如果匹配,就執(zhí)行自定義的異常處理邏輯。

在SpringBoot中我們通過 @ControllerAdvice 注解和 @ExceptionHandler注解注冊了全局異常處理器,因此resolveException方法會將異常進(jìn)行傳播給我們自定義的異常處理器,最后就能進(jìn)行全局異常處理了。

到此這篇關(guān)于SpringBoot對Filter過濾器中的異常進(jìn)行全局處理的文章就介紹到這了,更多相關(guān)SpringBoot異常全局處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 獲取Java的MyBatis框架項目中的SqlSession的方法

    獲取Java的MyBatis框架項目中的SqlSession的方法

    SqlSession中包括已經(jīng)映射好的SQL語句,這樣對象實(shí)例就可以直接拿過來用了,那么這里就來講解獲取Java的MyBatis框架項目中的SqlSession的方法
    2016-06-06
  • 一次詭異的full gc查找問題全過程

    一次詭異的full gc查找問題全過程

    這篇文章主要給大家分享介紹了一次詭異的full gc查找問題全部過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧啊
    2018-11-11
  • Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例

    Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例

    這篇文章主要介紹了Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例,值得一提的是所謂的雙向冒泡排序并不比普通的冒泡排序效率來得高,注意相應(yīng)的時間復(fù)雜度,需要的朋友可以參考下
    2016-04-04
  • Java實(shí)現(xiàn)Word轉(zhuǎn)PDF的兩種常見方案和性能實(shí)測

    Java實(shí)現(xiàn)Word轉(zhuǎn)PDF的兩種常見方案和性能實(shí)測

    這篇文章對比了Java后端開發(fā)中Word轉(zhuǎn)PDF的兩種常見方案,即docx4j(純Java實(shí)現(xiàn))和LibreOffice(調(diào)用Office原生引擎),下面小編就和大家詳細(xì)介紹一下具體實(shí)現(xiàn)方法吧
    2026-01-01
  • Java?SM2加密相關(guān)實(shí)現(xiàn)與簡單原理詳解

    Java?SM2加密相關(guān)實(shí)現(xiàn)與簡單原理詳解

    SM2算法可以用較少的計算能力提供比RSA算法更高的安全強(qiáng)度,而所需的密鑰長度卻遠(yuǎn)比RSA算法低,這篇文章主要給大家介紹了關(guān)于Java?SM2加密相關(guān)實(shí)現(xiàn)與簡單原理的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • SpringBoot接口返回日期格式化的3種方法實(shí)現(xiàn)與對比

    SpringBoot接口返回日期格式化的3種方法實(shí)現(xiàn)與對比

    這篇文章主要為大家詳細(xì)介紹了SpringBoot中接口返回日期格式化的3種方法實(shí)現(xiàn)與對比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-09-09
  • idea文件上有鎖文件只讀不可編輯的解決

    idea文件上有鎖文件只讀不可編輯的解決

    這篇文章主要介紹了idea文件上有鎖文件只讀不可編輯的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • spring中的注入list集合

    spring中的注入list集合

    這篇文章主要介紹了spring中的注入list集合問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java 中HashCode重復(fù)的可能性

    java 中HashCode重復(fù)的可能性

    這篇文章主要介紹了java 中HashCode重復(fù)的可能性的相關(guān)資料,這里提供實(shí)例及測試代碼,需要的朋友可以參考下
    2017-07-07
  • Java中的Semaphore(信號量)全面解析

    Java中的Semaphore(信號量)全面解析

    信號量(Semaphore)是Java多線程兵法中的一種JDK內(nèi)置同步器,通過它可以實(shí)現(xiàn)多線程對公共資源的并發(fā)訪問控制,這篇文章主要介紹了Java中Semaphore(信號量)的相關(guān)資料,需要的朋友可以參考下
    2025-08-08

最新評論

安徽省| 乌苏市| 搜索| 正定县| 淳化县| 遂川县| 资源县| 郧西县| 平阳县| 陆良县| 庄河市| 惠州市| 岫岩| 贞丰县| 财经| 南靖县| 故城县| 宝清县| 筠连县| 石屏县| 乌海市| 鸡东县| 蚌埠市| 阜阳市| 芜湖县| 固安县| 昌平区| 屏东市| 仲巴县| 日土县| 连平县| 濮阳市| 台江县| 团风县| 运城市| 怀仁县| 克拉玛依市| 乐山市| 当雄县| 攀枝花市| 疏附县|