亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring security 將 ApplicationEventListener 添加到

Spring security 將 ApplicationEventListener 添加到

智慧大石 2021-12-30 20:27:31
我已經AuthenticationFailureListener通過 using實現了失敗登錄,ApplicationListener<AuthenticationFailureBadCredentialsEvent>并且我所有的 Bad Credentials 事件都在同一個類中處理,非常方便,我嘗試添加一個監聽器到ExpiredJwtExceptionorSignatureException但我無法確定哪個事件被觸發,我試過 -@Componentpublic class ApplicationEventListener implements ApplicationListener<ApplicationEvent>{    @Override    public void onApplicationEvent(ApplicationEvent event) {        System.out.println(event.toString()); //not printed when ExpiredJwtException thrown    }}捕獲所有ApplicationEvent但當此異常之一發生時,該方法onApplicationEvent不會觸發。我能趕上這個例外,但我想在全球范圍內處理他們像BadCredentialsException被處理AuthenticationFailureBadCredentialsEvent。嘗試過AuthenticationFailureExpiredEvent-@Componentpublic class ApplicationEventListener implements ApplicationListener<AuthenticationFailureExpiredEvent>{    @Override    public void onApplicationEvent(AuthenticationFailureExpiredEvent event) {        System.out.println("Expired!!"); //same result    }}但仍然無法正常工作。
查看完整描述

2 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

我不確定這一點,我必須檢查源,但是:可能是應用程序事件沒有ExpiredJwtExceptionor發出SignatureException

可能的解決方案是:

  1. 自己發布事件:正如您提到的,您可以捕獲這些異常,因此一個簡單的解決方案是捕獲它們然后發出所需的事件。您只需要自動裝配ApplicationEventPublisher,然后調用publishEvent(event)。

  2. 使用 aFilter在一個地方捕獲和處理異常。

解決方案2示例:

public class AuthFailureFilter extends GenericFilterBean {

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        try {

            chain.doFilter(request, response);

        } catch (ExpiredJwtException | SignatureException exception) {

            handle(exception);

        }

    }

}


查看完整回答
反對 回復 2021-12-30
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

我認為發布ApplicationEvent捕獲異常時最簡單的方法是使用ApplicationEventPublisher. 無需ApplicationEvent使用此方法來實現,因為它將任何對象包裝到PayloadApplicationEvent您可以在其中使用ApplicationEventListener并對其進行操作的 。這適用于 Spring 4.2,這里是官方鏈接:https : //spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2


查看完整回答
反對 回復 2021-12-30
  • 2 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號