在代码中添加监听器,以便在身份验证失败时调用AuthenticationFailureBadCredentialsEvent事件。以下是示例代码:
@Component public class AuthenticationFailureListener extends AbstractAuthenticationFailureEvent {
@Autowired
private ApplicationEventPublisher eventPublisher;
@Override
public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent event) {
eventPublisher.publishEvent(event);
}
}
在您的配置中添加以下代码:
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationFailureListener authenticationFailureListener;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.exceptionHandling()
.authenticationEntryPoint(authenticationEntryPoint())
.and()
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable()
.formLogin()
.loginProcessingUrl("/authenticate")
.successHandler(authenticationSuccessHandler())
.failureHandler(authenticationFailureHandler())
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessHandler());
}
@EventListener
public void onAuthenticationFailure(AuthenticationFailureBadCredentialsEvent event) {
authenticationFailureListener.onApplicationEvent(event);
}
}