最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Shiro集成JWT過(guò)濾器異常無(wú)法捕捉

2023-03-20 11:21 作者:筱賁_  | 我要投稿

因?yàn)镾pringBoot也是剛剛開(kāi)始自學(xué),差不多學(xué)個(gè)幾個(gè)小時(shí),放下個(gè)好幾天,一直學(xué)的磕磕絆絆的,

在shiro集成jwt時(shí)發(fā)現(xiàn)jwt拋出的異常,全局異常處理器無(wú)法捕捉,因?yàn)檎?qǐng)求會(huì)按照 filter -> interceptor -> controllerAdvice -> aspect -> controller的順序調(diào)用

所以RestControllerAdvice無(wú)法捕獲到過(guò)濾器的異常,

在網(wǎng)上找了好多的方式,大致有以下幾種

1.轉(zhuǎn)發(fā)方式

大致是在JWTFilter 新增responseError方法,修改executeLogin方法,在過(guò)濾器中捕獲到異常時(shí),httpServletResponse.sendRedirect 使用重定向到一個(gè)我們自定義的處理過(guò)濾器錯(cuò)誤的一個(gè)controller中,返回自定義格式的對(duì)象到前端。

2.修改ErrorController?

新建一個(gè)ErrorControllerImpl 實(shí)現(xiàn)ErrorControllerErrorPath 指向error 再寫(xiě)一個(gè)方法把Error拋出 然后Controller全局統(tǒng)一異常處理RestControllerAdvice就能捕獲到異常了


這兩種方式都可以實(shí)現(xiàn),但是我只想簡(jiǎn)單的拋出一個(gè)異常而已,而且這兩種方式只能返回錯(cuò)誤,無(wú)法返回自定義狀態(tài)碼,想要返回自定義狀態(tài)碼,需要自行寫(xiě)邏輯判斷,有點(diǎn)懶,就沒(méi)用這種方式,本來(lái)想放棄了,就這樣吧,這兩種方式麻煩一點(diǎn),但也不是不能用,然后我突然發(fā)現(xiàn),在shiro自定義的RealmdoGetAuthenticationInfo方法中拋出的異常都無(wú)法捕捉了,我忍,因?yàn)榭|了一下執(zhí)行過(guò)程后,發(fā)現(xiàn)執(zhí)行doGetAuthenticationInfo的時(shí)候,還是在過(guò)濾器那里,所以也捕捉不到異常,然后我在過(guò)濾器中使用Autowired自動(dòng)注入了AdminService,在過(guò)濾器中查詢用戶信息,在按照上面兩種方式拋出異常不就可以了,結(jié)果報(bào)了空指針異常,研究半天,想著自動(dòng)注入不可行,那么使用ApplicationContextgetBean方式來(lái)獲取呢,結(jié)果可行,那么也可以使用使用這種方式來(lái)獲取handlerExceptionResolver,通過(guò)handlerExceptionResolverresolveException來(lái)拋出異常啊,這樣也不用轉(zhuǎn)發(fā)或者修改ErrorController

在啟動(dòng)文件同級(jí)的地方建立一個(gè)SpringContext


SpringContext

然后再過(guò)濾器中使用handlerExceptionResolver.resolveException來(lái)拋出異常



Shiro集成JWT過(guò)濾器異常無(wú)法捕捉的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
江口县| 萨嘎县| 曲靖市| 什邡市| 启东市| 中方县| 福州市| 阿拉善左旗| 甘德县| 安达市| 阳泉市| 昂仁县| 奉贤区| 逊克县| 普宁市| 甘泉县| 巴楚县| 蛟河市| 陆良县| 凯里市| 隆尧县| 连江县| 富源县| 梨树县| 前郭尔| 淅川县| 孙吴县| 铜陵市| 宜阳县| 湖口县| 岳普湖县| 普陀区| 红河县| 英德市| 民权县| 福州市| 建阳市| 安顺市| 越西县| 揭阳市| 安阳县|