- Publié le
Ajouter la sécurité à une application Spring Boot avec JWT et Hazelcast
- Auteurs
- Nom
- Code Smarter
- @codesmarter_dev
Dans cet article, nous allons sécuriser notre application Spring Boot et mettre en place un système de cache.
👉 Si vous n’avez pas suivi le premier article, voici le lien : [link]
Spring Security et JWT Token
La première étape consiste à ajouter la dépendance spring-boot-starter-security dans votre fichier pom.xml
.
Cela ajoutera une couche de sécurité à votre application.
➡️ Redémarrez l’application et essayez d’afficher la liste des employés avec l’URL :http://localhost:8181/api/employee/all
1. Utilisateur de l’application
Nous devons séparer les utilisateurs de l’application des employés.
Pour cela, créons une classe User
.
Cette classe contiendra :
- un login,
- un mot de passe,
- un lien vers l’employé associé.
2. Créé le Repository User
Authentification et Autorisation des utilisateurs avec Spring Boot
Pour supporter à la fois l’authentification et l’autorisation dans notre application, nous allons :
- Implémenter un filtre d’authentification pour délivrer des JWT aux utilisateurs envoyant leurs identifiants,
- Implémenter un filtre d’autorisation pour valider les requêtes contenant un JWT,
- Créer une implémentation personnalisée de
UserDetailsService
afin d’aider Spring Security à charger les données spécifiques à l’utilisateur dans le framework, - Étendre la classe
WebSecurityConfigurerAdapter
pour personnaliser la configuration de sécurité selon nos besoins.
Étapes principales
Filtre d’authentification
Sert à délivrer un JWT à l’utilisateur qui s’authentifie avec ses identifiants.Filtre d’autorisation
Valide les requêtes qui contiennent un JWT dans leur en-tête.Implémentation de
UserDetailsService
Permet à Spring Security de charger les informations spécifiques à chaque utilisateur (login, mot de passe, rôles, etc.).Extension de
WebSecurityConfigurerAdapter
Permet de configurer les règles de sécurité, comme les endpoints protégés, les méthodes HTTP autorisées, etc.
Sécuriser une API REST avec Spring Security
Ajouter la sécurité dans une application Spring Boot est très simple.
Il suffit d’ajouter la dépendance suivante dans votre pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Lancer l’application
Redémarrez votre application. Dans les logs de la console, vous verrez qu’un mot de passe est généré automatiquement.
Nom d’utilisateur par défaut : user
Mot de passe par défaut : généré dans la console au démarrage de l’application.
Exemple
Si vous essayez d’accéder à l’API via : http://localhost:7070/api/employee
Un formulaire de connexion s’affichera automatiquement.
Le nom d’utilisateur et le mot de passe par défaut peuvent être trouvés dans les logs de la console au démarrage de l’application.
- Nom d’utilisateur par défaut :
user
- Mot de passe par défaut : visible dans la console STS comme indiqué ci-dessous.

Afin d’utiliser votre propre nom d’utilisateur et mot de passe au lieu de ceux générés automatiquement, vous devez spécifier les propriétés suivantes dans le fichier application.properties
:
spring.security.user.name=test
spring.security.user.password=test123
Mise à jour de votre endpoint Angular pour accéder à un endpoint REST sécurisé
Si vous essayez d’accéder à http://localhost:4200/heroes via le navigateur ou Postman, vous obtiendrez un code 401 Unauthorized, ce qui signifie un accès non autorisé à l’URL.
Nous devons donc envoyer des en-têtes d’autorisation Basic dans notre requête HTTP. Mettons à jour notre service Angular HeroService, dans la méthode getHeroes() :
getHeroes() {
const url = 'http://localhost:7070/api/heroes';
const headers = new HttpHeaders({
Authorization: 'Basic ' + btoa('test:test123')
});
return this.http.get(url, { headers });
}
Essayez à nouveau en vérifiant http://localhost:7070/api/heroes dans le navigateur. Cela fonctionne ?
Non. La raison est que nous devons ajouter le support du protocole CORS dans notre backend REST.
Partage des ressources entre origines (CORS)
Nous devons ajouter le support du protocole CORS pour que notre service Angular puisse appeler un endpoint hébergé sur un domaine différent.
En effet, notre application front-end s’exécute sur http://localhost:4200, mais elle tente d’accéder à une ressource sur un autre domaine, à savoir http://localhost:7070.
Côté serveur, nous devons configurer Spring Security pour autoriser CORS. Pour ce faire, nous devons :
Créer une classe de configuration pour la sécurité web.
Cette classe indiquera à Spring Security d’autoriser les vérifications préliminaires (pre-flight checks) du navigateur.
Cela se fait en surchargeant la méthode configure de WebSecurityConfigurerAdapter.
Nous devons créer deux fichiers :


Vérifiez de nouveau l’URL suivante dans votre navigateur :
Vous devriez maintenant voir à nouveau la liste des heroes.
Félicitations !!! 🎉
Bref résumé
Dans cet article, nous avons :
- Créé une API REST simple avec Spring Boot.
- Sécurisé l’API en utilisant Spring Security avec une authentification de type Basic.
- Utilisé la plateforme front-end populaire Angular pour accéder à l’API sécurisée.