在Spring Security中捕获身份验证失败

时间:2017-05-20 13:24:47

标签: spring spring-security

我已经在类下面对REST服务中的用户进行身份验证

Access Control Allow Origin

身份验证工作正常但我希望每次验证失败时都会记录。它现在的工作方式是Spring Security默认返回@Service public class AuthenticationService { private static final Logger log = LoggerFactory.getLogger(AuthenticationService.class); @Autowired private AuthenticationManager authenticationManager; public void getAuthentication(AccountCredentials credentials) { log.info("Authentication requested for user: " + credentials.getEmail()); final Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken( credentials.getEmail(), credentials.getPassword() ) ); SecurityContextHolder.getContext().setAuthentication(authentication); } } 状态。如何在日志中捕获身份验证失败?我尝试了不同的方法但是从未达到代码,因为在返回403之后没有执行其他代码。我还尝试使用403块,但这会扰乱流程,我必须对try catch响应进行编码。我喜欢保留403状态消息,并且除了在日志中捕获之外,不会运行任何其他代码。

1 个答案:

答案 0 :(得分:0)

我是在M. Deinum回复之后实现的。

@Component
public class AuthenticationFailureListener
        implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> {

    private static final Logger log = LoggerFactory.getLogger(AuthenticationFailureListener.class);

    public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent event) {

        log.info("Authentication failed for user: " + event.getAuthentication().getPrincipal());

    }
}

效果很好。正是在寻找什么。