JWT côté SpringBoot
Schéma du login (méthode signIn)
Liste des Classes & Interfaces
Package controller
- AppController : Contrôleur
Package service
- AppService : Interface
- AppServiceImpl : Classe qui implémente AppService
- UserDetailServiceImpl : Classe qui implémente UserDetailService
Package dto optionnel (DTO = Data Transfer Object)
- JsonWebToken : Classe spécifique DTO (Token)
- AppUserDto : Classe Spécifique DTO (AppUser) permettant de renvoyer un objet User sans le mot de passe.
Package model (Entities)
- AppUser : Classe Entity
- Role : Classe Entity qui implémente GrantedAuthority
Package repository
- AppUserRepository : Classe qui hérite de JpaRepository
Package security
- JwtTokenFilter : Classe qui hérite de OncePerRequestFilter
- JwtTokenProvider : Classe qui fournit le Token
- WebSecurityConfig : Classe qui hérite de WebSecurityConfigurerAdapter
Package exception
- ExistingUserNameException : Classe spécifique si le AppUser n’existe pas en BD
- InvalidCredentialsException : Classe spécifique si les droits de AppUser sont invalides
- InvalidJWTException : Classe spécifique si le format de JWT est invalide.
Contenu du fichier Application.properties
security.jwt.token.secret-key=03888dd6ceb88c3fee89570802fb93d483fd52d70349d8f7e7581ae346cf658
# + les infos pour hibernate ou autres pour se connecter à la base de données
Détail de l’appli back-end
Pensez à ajouter les dépendances pour JWT et la sécurité avec Spring Boot :
- Gradle :
compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.0'
implementation 'org.springframework.boot:spring-boot-starter-security'
- Maven :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
La structure d’API REST construite avec Spring boot est sécurisée avec Spring Security et JWT.
L’API permet de :
- Gérer les utilisateurs (création de compte, authentification, récupération de la liste des utilisateurs).
- Gérer les catégories de film (récupération de la liste des catégories de film, création d’une nouvelle catégorie de film).
- Gérer les films (récupération de la liste des films, création d’un nouveau film).
Quelques roles ont été définis dans l’API :
ROLE_ADMIN
ROLE_CREATOR
ROLE_READER
Les accès aux fonctionnalités sont définis de la manière suivante :
- La création de compte et l’authentification sont accessibles à n’importe qui.
- Les fonctions de récupération de liste sont accessible aux utilisateurs authentifiés.
- Les fonctions de création sont accessibles aux utilisateurs avec le
ROLE_ADMIN
ouROLE_CREATOR
. - Les fonctions de récupération d’informations sur les utilisateurs sont réservées au
ROLE_ADMIN
.
Les accès aux pages sont définis de la manière suivante :
- Seule la page de login est visible si l’utilisateur n’est pas authentifié.
- Les pages de liste sont visibles aux utilisateurs authentifiés.
- Les pages de création sont visibles aux utilisateurs avec le
ROLE_ADMIN
ouROLE_CREATOR
. - Les pages de récupération d’informations sur les utilisateurs sont réservées au
ROLE_ADMIN
.
Lien vers GitHub de l’application SpringBoot Cinéma :
https://github.com/pbougetsimplon/springdemos/tree/master/cinema-back-api