当前位置: 首页 > 知识库问答 >
问题:

Spring Security无法捕捉ApplicationListener中的登录失败

陆洛城
2023-03-14
@Component
public class MyApplicationListener implements ApplicationListener<AbstractAuthenticationEvent> {

    private static Logger logger = LogManager.getLogger(MyApplicationListener);

    @Override
    public void onApplicationEvent(AbstractAuthenticationEvent abstractAuthenticationEvent) {

        if (abstractAuthenticationEvent instanceof AbstractAuthenticationFailureEvent) {

            logger.warn("Detected an invalid login");

        } else if (abstractAuthenticationEvent instanceof AuthenticationSuccessEvent) {

            logger.info("A user logged in successfully");
        }
    }
}

我更改了监听器,以便它记录所有applicationevent,如下所示:

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {

    private static Logger logger = LogManager.getLogger(MyApplicationListener);

    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {

        logger.info("Got an event of type {}", applicationEvent.getClass());
    }
}

但是,记录的唯一与安全相关的事件类型为org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent。失败的登录不会触发任何事件。我会很感激你的指点,谢谢。

共有1个答案

钦枫
2023-03-14

也许有点晚了,但我得到了同样的问题,并以这种方式解决它:

在configureGlobal方法中:auth.AuthenticationEventPublisher(defaultAuthenticationEventPublisher());

不要忘记将DefaultAuthenticationEventPublisher声明为Bean

@Bean
public DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(){
    return new DefaultAuthenticationEventPublisher();
}
 类似资料:
  • 在节点中。在js服务器上,捕获SIGTERM和捕获SIGINT有什么区别吗? 我认为进程不应该能够防止SIGINT关闭? 我是否能够捕获两个信号并阻止退出?我的实验表明答案是肯定的,但从我所读到的内容来看,SIGINT总是假设关闭一个进程。 或者我把SIGINT和SIGKILL混淆了?也许SIGKILL是我无法恢复的信号? 捕捉这些信号当然可以让我优雅地关机: 我想我把SIGINT和SIGKILL

  • springsecurity oauth2.0 谁做过记录登录日志?监听事件好像没法区分是什么原因失败的、比如client错误还是用户名错误

  • 错误描述:尝试登录时未显示任何内容。 我们输入用户(邮件)和密码,它试图登录,但什么也没发生。检查浏览器的控制台,但没有显示任何错误,甚至没有任何线索。 其他信息: PrestaShop版本:1.7.2 PHP版本:7.1.33 数据库客户端版本:libmysql-5.1.73 我们已经尝试过: > (!isset($this)- 在route/PROJECT_文件夹/classes/contro

  • 我想我可能错过了一些配置,但我们正在尝试使用Debezium来从一个有大约800万条记录的表中快照所有行,一段时间后它就会停止。 连接器配置为: 连接器开始扫描行: 然后过了一段时间,我们 然后,扫描停止,我们多次尝试再次刷新提交偏移: 一段时间后(大约9~10分钟),它似乎成功了,并开始再次扫描行。但是过了一段时间后,它再次失败,然后,没有完成所有记录,连接器将其状态更改为 其中一个错误是 我读

  • 问题内容: 在Java中是否有捕捉到内存不足错误()的问题? 问题答案: 是的 。以下是一些可能有意义的示例: 如果您想通过 优雅地关闭 程序来处理它 如果要向用户显示问题或 记录错误 根据您的设计,您甚至可以清理内存并 恢复工作状态 但是 ,请注意,通常情况下(除非您处在一次要分配大量内存的位置),对于这些情况,您可能不会专门捕获OutOfMemoryError,而是始终在顶部进行操作主要入口点

  • 我有一个命令: 快乐路径是可行的,但它看起来不像是执行过的。失败是这样的: 有办法捕获该错误吗?即使它只匹配字符串(我想顺便隐藏)