Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 8 · Exercice de TD
Garder la trace des échecs
Sécuriser l'application · niveau 2
Énoncé
Écrire un composant qui écrit dans le journal, au niveau WARN, chaque échec d'authentification, avec le nom tenté et la raison. Le vérifier par un test qui capture la sortie.
Corrigé
Spring Security publie un événement à chaque succès et à chaque échec d'authentification ; il suffit de l'écouter :
@Component
public class JournalDesConnexions {
private static final Logger journal = LoggerFactory.getLogger(JournalDesConnexions.class);
@EventListener
public void echec(AbstractAuthenticationFailureEvent evenement) {
journal.warn("Échec de connexion pour « {} » : {}", evenement.getAuthentication().getName(),
evenement.getException().getClass().getSimpleName());
}
}
// Exercice 8.10
@Test
void ex10_journalDesEchecs(CapturedOutput sortie) {
mvc.get().uri("/api/admin/commandes").with(httpBasic("admin", "1234")).exchange();
assertThat(sortie.getOut()).contains("Échec de connexion pour « admin » : BadCredentialsException");
}
avec @ExtendWith(OutputCaptureExtension.class) sur la classe. Lors de l'exécution, le journal contient par exemple :
f.l.exercices.JournalDesConnexions : Échec de connexion pour « stagiaire » : DisabledException
Le mot de passe tenté n'est jamais écrit dans le journal : il pourrait être celui d'un autre compte, à une faute de frappe près.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.