Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 7 · Application directe du cours
Le filet de sécurité
Tester l'application · niveau 2
Énoncé
Le gestionnaire d'erreurs du chapitre 4 transforme toute exception imprévue en réponse 500. Écrire un test de tranche qui le vérifie, et qui vérifie aussi que la réponse ne révèle rien de l'intérieur (ni le type de l'exception, ni son message, ni la trace).
Corrigé
void ex7_leFiletDeSecuriteNeMontreRienDeLInterieur() throws Exception {
when(service.lister(any(), any())).thenThrow(new IllegalStateException("connexion perdue à la base"));
var reponse = mvc.get().uri("/api/livres").exchange();
assertThat(reponse).hasStatus(500)
.bodyJson().extractingPath("$.detail")
.isEqualTo("Une erreur inattendue s’est produite. Réessayez plus tard.");
assertThat(reponse.getResponse().getContentAsString())
.doesNotContain("IllegalStateException", "connexion perdue", "at fr.librairie");
}
La doublure lève une exception qui n'a rien à voir avec l'API. La réponse est le ProblemDetail générique, et le corps ne contient ni le nom de l'exception, ni son message, ni une ligne de trace : ces détails ne sont écrits que dans le journal du serveur (le test les y fait d'ailleurs apparaître, par la ligne « Erreur inattendue »). Une trace renvoyée au client renseignerait un attaquant sur l'intérieur de l'application.
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.