Adloun

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

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 →