五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
镇康县| 邯郸市| 武汉市| 宾川县| 惠来县| 开封市| 河曲县| 阳原县| 西充县| 公安县| 海林市| 扎赉特旗| 萝北县| 法库县| 河北区| 鲜城| 香格里拉县| 宜良县| 石泉县| 和静县| 昌宁县| 富川| 武冈市| 香港| 茶陵县| 刚察县| 襄垣县| 吉林市| 唐山市| 正宁县| 府谷县| 延寿县| 泸州市| 凤庆县| 工布江达县| 崇礼县| 城步| 凤山市| 昌吉市| 通榆县| 武鸣县|