Skip to content

arouenne/Spring2023

 
 

Repository files navigation

TAA - TP Spring 3 & 4

Auteurs : Arwen Toulemont, Hugo Montiège


Structure du Projet

Le projet est organisé en trois parties principales, chacune correspondant à un sous-dossier :

  1. Partie 1 : Injection de Dépendances (spring-boot-sample-simple-standalone)
  2. Partie 2 : Spring AOP (spring-boot-sample-aop-standalone)
  3. Partie 3 : Spring Data JPA et REST (spring-boot-sample-data-jpa-standalone)

Prérequis

  • 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.

Partie 1 : Injection de Dépendances

Description

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 :

Exécution

Pour exécuter cette partie :

  • Exécutez la classe SampleSimpleApplication.java qui exécute les 2 scénarios mis en places.

Partie 2 : Spring AOP

Description

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é.

Exécution

Pour tester cette partie :

  • Exécutez la classe SampleSimpleApplication.java.

Partie 3 : Spring Data JPA et REST

Description

Cette partie intègre les classes métiers avec Spring Data JPA et expose les fonctionnalités via une API REST.

Domaine

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.

Diagramme de classe UML

Exécution

Pour exécuter cette partie :

  1. Exécutez le script run_db.sh pour démarrer la base de données
  2. Démarrez le serveur en exécutant la classe SampleDataJpaApplication.java.
  3. Exécutez les scripts test_user_controller.sh et test_kahoot_controller.sh pour tester les différents end points. (La base de données doit être vide)

Query Methods

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.

MapStruct

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.

Lombok

Nous avons utilisé lombok sur les entités pour alléger le code et éviter les getters/setters manuels.

TP4: Keycloak

Nous avons mis en place Keycloak sur la branche security.

Mise en place d'un SSO avec keycloak

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

Exécution

Depuis la branche security

  1. 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
  2. Exécutez le script run_db.sh pour démarrer la base de données
  3. Démarrez le serveur en exécutant la classe SampleDataJpaApplication.java.
  4. Importez le fichier json de configuration de realm pour keycloak realm-export.json dans 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 :))
  5. 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.


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 86.2%
  • Shell 13.8%