Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →