为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信