Skip to content

ubmagh/spring-students-management

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

spring-students-management

Application JEE en spring pour gérer les étudiant.

Rapport :


1- Initialisation du projet :

  • Avec intellij j'ai créer ce projet avec les dépendences suivantes :


2- Saisir la configuration du projet :

  • Dans ressources/application.properties j'ai saisi la configuration de l'application : configuration de la base de données, le port ...


3- Créer l'entité Etudiant :

  • Création de l'entité entities/Etudiant avec l'enumeration entities/GenresEnum pour l'attribut genre de l'Etudiant.


4- Créer le repository de l'entité etudiant :

  • Création du repository repositories/EtudiantRepository, avec une méthode qui sera utilisée lors de la recherche par nom.


5- Créer l'interface service et son implementation :

  • Créé l'interface services/IEtudiantService

  • et son implémentation services/EtudiantServiceImpl


6- Ajouter Bootstrap & JQuery comme dépendences

  • Ajouter ces dépendences dans le fichier pom.xml


7- Créer le controlleur web + les templates (views)

  • Le controlleur web/MainController

  • Le template de base resources/templates/layouts/BaseLayout.html :

  • Le template (view) de la page principale (index) resources/templates/pages/home.html :

  • j'ai aussi ajouté des fichiers ressources dans le chemin des ressources statiques :


8- Configuration du package Spring Security

  • L'application necéssite une configuration de sécurité, pour pouvoir accéder à la page principale index, pour cela j'ai créé la class security/SecurityConfiguration

  • J'ai découvert que l'application manque les dépendances de thymeleaf, je les ai ajoutés :

  • Après avoir lancé l'application, voici la page principale sur le navigateur :


9- Ajouter des données à la BD :

  • Pour ajouter des données fictives à la BD, j'ai créé la fonction BEAN suivante dans le programme principal de l'app :

  • voici le contenu de la table etudiant dans la BD


10- Ajouter le package faker :

  • Pour générer des données nombreuses et adéquates, j'ai installé faker :

  • et j'ai mis à jour la fonction BEAN dans le programme pricipal :

  • voici le contenu de la table etudiant dans la BD


11- Ajouter le package spring-boot-devtools :

  • pour eviter de redémarrer à chaque modification l'application.


12- La page d'acceuil et la page contennant la liste des étudiants

  • la page d'acceuil contient une zone de text pour rechercher un étudiant, la recherche est redirigée vers la liste des étudiants.

  • J'ai créé le controlleur web/EtudiantController qui va s'occuper de toutes les pages en relation avec l'entité Etudiant, toutes ses routes vont etre préfixées par /etudiants.
  • J'ai créé dedans une fonction qui va retourner le template de la liste des étudiants paginée

  • Ensuite, j'ai créé le template (view) resources/templates/pages/etudiants/list.html :

  • voici le rendu de la liste des étudiants :


13- La page d'insértion d'un nouveau étudiant

  • intaller d'abord la dependance de validation

  • Ajouter les annotations de validation à l'entité Etudiant :

  • créer la fonction add sur le controlleur web/EtudiantController qui va retourner le formulaire pour créer le nouveau étudiant :

  • Créé le template (view) du formulaire sur le chemin resource/pages/etudiants/create_form.html : :

  • en accédant sur le chemin localhost:8080/etudiants/new, voici ce que s'affiche :

  • Ensuite, j'ai créé la fonction (la route) pour traiter le formulaire envoyé :

  • Après l'insertion (sans erreurs dans la validation), une redirection vers la liste des étudiants occure :


14- Modifier les étudiants

  • créer la fonction edit sur le controlleur web/EtudiantController qui va retourner le formulaire pour modifier l'étudiant par son id :

  • Créé le template (view) du formulaire sur le chemin resource/pages/etudiants/edit_form.html : :

  • en accédant sur le chemin localhost:8080/etudiants/562a2a46-59f3-4217-92af-d142098f226e, voici ce que s'affiche :

  • mettre à jour la liste des étudiants avec un bouton de modification pour chaque ligne :

  • créer la fonction put sur le controlleur web/EtudiantController qui va retourner le formulaire traiter le formulaire et sauvegarder les changements :


15- Supprimer les étudiants

  • créer la fonction delete sur le controlleur web/EtudiantController qui va supprimer l'étudiant par son id :

  • Pour résoudre les contraintes de sécurité pour éffectuer la suppression, j'ai désactivé la vérification CSRF :

  • Ensuite j'ai ajouté sur la liste des étudiants le bouton de suppression et une boite de dialog de confirmation, ainsi le code javascript(JQuery) pour envoyer la requette ajax de suppression :


16- Sécuriser l'accès à l'application avec un système d'authentification basé sur Spring security en utilisant la stratégie UseDetails Service

  • Créer les deux entités : security/entities/AppUser & security/entities/AppRole

  • Créer les deux répositories pour les deux entités précédentes dans le package security/repositories :

  • Créer et implémenter l'interface (service) security/services/ISecurityService :

  • Implémenter l'interface UserDetailsService, et défninir comment les 'utilisateurs sont chargés :

  • Dans la configuration de Spring Security, j'ai précisé l'utilisation de la stratégie user-details en passant l'objet de UserDetailsService, et j'ai mis à jour les droits d'accès tel que seules les ressources statiques (webjars & css & js & images) et les deux pages accueil & liste des étudiants, qui sont accessibles par le public :

  • Dans le programme principal, j'ai défini la fonction BEAN qui va fournir à l'application toujours un PasswordEncoder de type BCryptPasswordEncoder pour Hasher les mots de passe, et une deuxième fonction BEAN pour créer deux premiers utilisateurs avec deux roles ADMIN & USER :

  • Au relancement de l'application, trois nouvelles tables sont crées, avec les données dedans :

  • J'ai revenu sur la configuration de sécurité pour mettre à jour les droits d'accès :

  • Ensuite, j'ai créé la classe de configuration security/MethodSecurityConfig pour activer l'utilisation des annotation pour sécuriser l'accès aux routes voir ce lien :

  • Et enfin pour chaque route dans le controlleur web/EtudiantsController j'ai spécifié quel utilisateur peut y accéder avec l'annotation @PreAuthorize() :

  • Ajouter le package thymeleaf-extras-springsecurity5 pour avoir un contexte de sécurité dans les template :

  • j'ai fait les changements sur les templates qui sont adéquats à ces modifications de sécurité, voici la page de la liste des étudiants ( utilisateur authentifié : admin) :

  • La page de la liste des étudiants ( utilisateur authentifié : user) :


17- D'autres fonctionnalités :

  • Ajout d'une page personnalisée pour l'erreur HTTP:403 (forbidden), lors d'un accès non authorisé et une pour l'erreur HTTP:404 page introuvable. ces deux pages sont placées dans le chemin templates/pages/errors/:

    • pour ça j'ai créé le controlleur qui permet de gérer les errerurs HTTP :

    • et j'ai créé les templates nécessaires dans le chemin resources/pages/errors :

  • Ajout d'une page personnalisée login :

    • modifier la configuration de spring sécurité :
    • ensuite, j'ai créé le controlleur security/SecurityController pour retourner la page login pour toute requette GET vers le chemin 'GET' :
    • et enfin j'ai créé le template resources/pages/security/login.html
    • Voici la page de login ;



branche : angular-2nd-frontend


Fin 👾 .

Bonus