Spring security 将 ApplicationEventListener 添加到

我已经AuthenticationFailureListener通过 using实现了失败登录,ApplicationListener<AuthenticationFailureBadCredentialsEvent>并且我所有的 Bad Credentials 事件都在同一个类中处理,非常方便,我尝试添加一个监听器到ExpiredJwtExceptionorSignatureException但我无法确定哪个事件被触发,我试过 -


@Component

public 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-


@Component

public class ApplicationEventListener implements ApplicationListener<AuthenticationFailureExpiredEvent>{


    @Override

    public void onApplicationEvent(AuthenticationFailureExpiredEvent event) {

        System.out.println("Expired!!"); //same result

    }

}

但仍然无法正常工作。


智慧大石
浏览 181回答 2
2回答

繁华开满天机

我不确定这一点,我必须检查源,但是:可能是应用程序事件没有为ExpiredJwtExceptionor发出SignatureException。可能的解决方案是:自己发布事件:正如您提到的,您可以捕获这些异常,因此一个简单的解决方案是捕获它们然后发出所需的事件。您只需要自动装配ApplicationEventPublisher,然后调用publishEvent(event)。使用 aFilter在一个地方捕获和处理异常。解决方案2示例:public class AuthFailureFilter extends GenericFilterBean {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chain.doFilter(request, response);&nbsp; &nbsp; &nbsp; &nbsp; } catch (ExpiredJwtException | SignatureException exception) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handle(exception);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}

UYOU

我认为发布ApplicationEvent捕获异常时最简单的方法是使用ApplicationEventPublisher.&nbsp;无需ApplicationEvent使用此方法来实现,因为它将任何对象包装到PayloadApplicationEvent您可以在其中使用ApplicationEventListener并对其进行操作的 。这适用于 Spring 4.2,这里是官方链接:https&nbsp;:&nbsp;//spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java