Auteurs : Arwen Toulemont, Hugo Montiège
Le projet est organisé en trois parties principales, chacune correspondant à un sous-dossier :
- Partie 1 : Injection de Dépendances (
spring-boot-sample-simple-standalone) - Partie 2 : Spring AOP (
spring-boot-sample-aop-standalone) - Partie 3 : Spring Data JPA et REST (
spring-boot-sample-data-jpa-standalone)
- Effectuez un maven clean install.
- Supprimez votre base de données si elle a été créée à partir du repository des TP précédents pour éviter les incohérences.
Cette partie implémente une application de gestion de magasin avec quatre classes principales :
- Client : Créé les scénarios d’achat.
- Magasin : Gère le stock, les commandes et les réapprovisionnements.
- Banque : Gère les transferts bancaires.
- Fournisseur : Réapprovisionne le magasin.
Deux scénarios sont implémentés :
Pour exécuter cette partie :
- Exécutez la classe
SampleSimpleApplication.javaqui exécute les 2 scénarios mis en places.
Cette partie implémente deux nouvelles fonctionnalités :
- Trace des méthodes : Un aspect de type Before est utilisé pour tracer l’exécution de toutes les méthodes publiques des beans. Chaque trace affiche la classe du bean et la méthode appelée.
- Gestion de la sécurité : Un aspect de type Around est utilisé pour simuler une vérification de sécurité. Dans 50% des cas de cette simulation, l’utilisateur est accepté, le reste du temps, il est refusé.
Pour tester cette partie :
- Exécutez la classe
SampleSimpleApplication.java.
Cette partie intègre les classes métiers avec Spring Data JPA et expose les fonctionnalités via une API REST.
Cette application modélise une plateforme permettant de créer et gérer des kahoots. Un Kahoot est une session interactive composée d’une liste d’activités (pour le moment, seule des questions à choix multiples sont implémentées), d’une liste d’utilisateurs participants, et d’un code unique pour y accéder. Chaque Question (qui hérite de la classe abstraite Activity) contient un intitulé et une liste de choix de réponse (QuestionChoice), chacun associé à un booléen indiquant s’il s’agit de la bonne réponse. Les utilisateurs (User) sont identifiés par un nom et une adresse e-mail, ce qui permet de suivre leur participation et leurs réponses. Ce modèle est conçu pour être extensible : d’autres types d’activités, comme des sondages ou des questions libres, peuvent être ajoutés.
Pour exécuter cette partie :
- Exécutez le script
run_db.shpour démarrer la base de données - Démarrez le serveur en exécutant la classe
SampleDataJpaApplication.java. - Exécutez les scripts
test_user_controller.shettest_kahoot_controller.shpour tester les différents end points. (La base de données doit être vide)
Vous trouverez un exemple de query method dans la classe UserDao.java située dans le répertoire /src/main/java/sample/data/jpa/service.
Vous trouverez un exemple d'utilisation de mapstruct pour transformer des entités JPA en DTOs et inversement dans la classe KahootMapping.java située dans le répertoire /src/main/java/sample/data/jpa/service.
Il est appelé dans la méthode testMapStruct dans la classe KahootController.java.
Nous avons utilisé lombok sur les entités pour alléger le code et éviter les getters/setters manuels.
Nous avons mis en place Keycloak sur la branche security.
Cette partie, développée sur la branche security, ajoute une authentification et autorisation centralisée à l’aide de Keycloak. Les utilisateurs peuvent se connecter via OAuth2/OpenID Connect. La configuration se fait dans WebSecurityConfig.java via un SecurityFilterChain
Depuis la branche security
- Lancez le docker pour lancer keycloak et créer un utilisateur :
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev - Exécutez le script
run_db.shpour démarrer la base de données - Démarrez le serveur en exécutant la classe
SampleDataJpaApplication.java. - Importez le fichier json de configuration de realm pour keycloak
realm-export.jsondans le dossier ./keycloak_export_config. Vous pouvez le faire via l'interface keycloak http://localhost:8080 puis Create Realm → Browse → Create, ou bien via docker. Cependant, ce fichier ne contient pas les utilisateurs. Vous pouvez les créer à la main, via docker ou depuis l'interface keycloak. Sinon, pour simplifier les tests, dans le répertoire ./keycloak_export_config vous pouvez lancer Keycloak avec un volume monté contenant toute la configuration locale :docker run -p 8080:8080 -v $(pwd)/keycloak-data:/opt/keycloak/data quay.io/keycloak/keycloak:latest start-dev(uniquement dans le cadre du TP, à ne pas faire en prod :)) - Rendez-vous ensuite sur http://localhost:8082. Pour accéder aux resources /admin ou /index, il faudra vous identifier avec les utilisateurs Keycloak créés :
- User 1 : login & mot de passe: myuser
- User 2 : login & mot de passe : myadmin
Vous pouvez ensuite vous déconnecter de keycloak via le bouton de logout qui terminera la session.
