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

Spring AbstractAuthenticationFailureEvent无法工作。身份验证失败时

田鹤轩
2023-03-14
@EventListener
    public void authFailedEventListener(AbstractAuthenticationFailureEvent authenticationFailureEvent) {
        // code for logging audit
        if(authenticationFailureEvent instanceof AbstractAuthenticationFailureEvent) { System.out.print(true);
    }else {
        System.out.print(false);
        
    }
        System.out.println(authenticationFailureEvent);
        //System.out.println("login failed for -->"+authenticationFailureEvent.getAuthentication().getPrincipal());
        System.out.print("Event Catched for Failed");
    }
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        try {
        auth.authenticationProvider(customAuthentication);
        auth.authenticationEventPublisher(new DefaultAuthenticationEventPublisher(applicationEventPublisher));
        }catch(OAuth2Exception ex) {
            throw new CustomOauthException(ex.getMessage());
        }
    }

共有1个答案

谢宸
2023-03-14

按以下方式配置DefaultAuthEnticationEventPublisher

@Bean
DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
     return new DefaultAuthenticationEventPublisher(applicationEventPublisher);
  }

并在身份验证管理器中使用它,例如

  @Autowired
  DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher;
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationEventPublisher(defaultAuthenticationEventPublisher);
  }

我做的测试:

@Configuration
public class ProjectConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .anyRequest().authenticated()
        .and().httpBasic();
  }

  @Autowired
  DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher;

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
        .inMemoryAuthentication()
        .passwordEncoder(NoOpPasswordEncoder.getInstance())
        .withUser("user").password("password").roles("USER");
    auth.authenticationEventPublisher(defaultAuthenticationEventPublisher);
  }

  @Override
  @Bean
  public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
  }

  @Bean
  DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(
      ApplicationEventPublisher applicationEventPublisher) {
    return new DefaultAuthenticationEventPublisher(applicationEventPublisher);
  }
}
@Component
public class GlobalEventsHandlers {

  @EventListener
  public void authFailedEventListener(
      AbstractAuthenticationFailureEvent authenticationFailureEvent) {
    // code for logging audit
    if (authenticationFailureEvent instanceof AbstractAuthenticationFailureEvent) {
      System.out.println("authenticationFailureEvent");
    } else {
      System.out.println("not authenticationFailureEvent");

    }
    System.out.println(authenticationFailureEvent);
    //System.out.println("login failed for -->"+authenticationFailureEvent.getAuthentication().getPrincipal());
    System.out.println("Event Catched for Failed");
  }

  @EventListener
  public void authSuccessEventListener(AuthenticationSuccessEvent authenticationSuccessEvent) {
    // code for logging audit
    if (authenticationSuccessEvent instanceof AuthenticationSuccessEvent) {
      System.out.println("authenticationSuccessEvent");
    } else {
      System.out.println("not authenticationSuccessEvent");

    }
    System.out.println(authenticationSuccessEvent);
    System.out.println("Event Catched for success");
  }
}
authenticationFailureEvent
org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent[source=UsernamePasswordAuthenticationToken [Principal=use, Credentials=[PROTECTED], Authenticated=false, Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=null], Granted Authorities=[]]]
Event Catched for Failed
authenticationSuccessEvent
org.springframework.security.authentication.event.AuthenticationSuccessEvent[source=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=user, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=F6977BE6F40E41D5972C4233868DF312], Granted Authorities=[ROLE_USER]]]
Event Catched for success
 类似资料:
  • 我试图建立一个简单的iOS /Rails应用程序,在那里我可以创建一个用户,然后使用BCrypt对他们进行身份验证。我试图按照BCrypt的说明进行操作,但我的身份验证过程不起作用。非常新的轨道,所以我肯定我搞砸了一些简单的事情! 要创建新用户,请执行以下操作: 在users_controller.rb 在user.rb 在服务器上: 在2014-08-21 19:32:05-0500开始POST

  • Tweepy API请求twitter return me Twitter错误响应:状态代码=401。 这是我的实际代码: 我曾试图用tweepy软件包删除推文,并获得了所有必需的密钥。镊子包装不起作用吗?有人能帮我解决这个问题吗。

  • 问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com

  • 我相对来说是JMeter的新手,但是我很难让HTTP Sampler登陆到一个安全的网页上。我认为它需要NTLM认证,所以我使用HTTP授权管理器来传递BlazeMeter指南中指定的凭证 我的授权管理器具有以下值: 基本网址: https:// [测试站点] 用户名: [我的用户名] 密码: [我的密码] 域:与基本网址相同 机制: BASIC_DIGEST 然而,我只是得到一个401错误(见下

  • 我收到一个错误“无法建立SSL连接,请参阅内部异常。身份验证失败,请参阅内部异常。”当尝试通过C#HttpWebRequest通过SSL发布请求时(已尝试RestSharp和HttpClient,结果相同)。我还尝试了网络上提到的所有可能的解决方案,如: 他们都不为我工作。另一个问题是,我在另一台计算机上运行相同的项目,它的工作没有任何问题。所以看起来问题的来源是环境,也许. net框架或注册表中

  • 我的symfony 4登录表单有问题。我是根据以下文件进行的:https://symfony.com/doc/current/security/form_login_setup.html 它的工作很好,然后密码和电子邮件是正确的,但若在数据库中找不到电子邮件和/或密码,则不会发生任何事情 我的主要身份验证: 我的主安全控制器: 我的登录名: 我的security.yaml: 第一次编辑 对secu