Application JEE en spring pour gérer les étudiant.
- Avec intellij j'ai créer ce projet avec les dépendences suivantes :
- Dans
ressources/application.properties
j'ai saisi la configuration de l'application : configuration de la base de données, le port ...
- Création de l'entité
entities/Etudiant
avec l'enumerationentities/GenresEnum
pour l'attribut genre de l'Etudiant.
- Création du repository
repositories/EtudiantRepository
, avec une méthode qui sera utilisée lors de la recherche par nom.
- Créé l'interface
services/IEtudiantService
- et son implémentation
services/EtudiantServiceImpl
- Ajouter ces dépendences dans le fichier
pom.xml
- 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 :
- 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 :
- 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
- 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
- pour eviter de redémarrer à chaque modification l'application.
- 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 :
- intaller d'abord la dependance de validation
- Ajouter les annotations de validation à l'entité
Etudiant
:
- créer la fonction
add
sur le controlleurweb/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 :
- créer la fonction
edit
sur le controlleurweb/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 controlleurweb/EtudiantController
qui va retourner le formulaire traiter le formulaire et sauvegarder les changements :
- créer la fonction
delete
sur le controlleurweb/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 :
- 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 rolesADMIN
&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) :
-
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/
: -
Ajout d'une page personnalisée login :
branche : angular-2nd-frontend