五月天青色头像情侣网名,国产亚洲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ó)家法律
开化县| 正宁县| 石城县| 信丰县| 清涧县| 临安市| 兰考县| 迭部县| 射洪县| 老河口市| 郓城县| 扬州市| 同仁县| 惠水县| 夏津县| 肃宁县| 宁乡县| 威宁| 双流县| 诸暨市| 连平县| 永吉县| 盈江县| 湖州市| 高碑店市| 平乐县| 巨鹿县| 南岸区| 永和县| 商城县| 曲水县| 蓬溪县| 抚松县| 子洲县| 泗洪县| 右玉县| 平乐县| 松潘县| 邓州市| 杂多县| 青河县|