package ch.rasc.sec.security; import java.time.LocalDateTime; import javax.persistence.EntityManager; import org.springframework.context.ApplicationListener; import org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import ch.rasc.sec.entity.User; @Component public class UserAuthenticationSuccessfulHandler implements ApplicationListener<InteractiveAuthenticationSuccessEvent> { private final EntityManager entityManager; public UserAuthenticationSuccessfulHandler(EntityManager entityManager) { this.entityManager = entityManager; } @Override @Transactional public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event) { Object principal = event.getAuthentication().getPrincipal(); if (principal instanceof JpaUserDetails) { User user = this.entityManager.find(User.class, ((JpaUserDetails) principal).getUserDbId()); user.setLockedOut(null); user.setFailedLogins(null); user.setExpirationDate(LocalDateTime.now().plusYears(1)); } } }