PROJET SCOLAIRE — BTS SIO

Application
Personnel
M2L

Refonte d'une application Java mono-utilisateur en solution multi-utilisateurs avec base de données MySQL, authentification sécurisée et trois niveaux d'habilitation distincts.

Java JDBC MySQL Architecture 3-tiers BCrypt
Personnel v2.0 — CLI
$ java -jar Personnel.jar
Connexion à MySQL… OK
Chargement des ligues… OK
login> root
pass> ••••••
✓ Connecté en tant que super-admin
1. Gérer les ligues
2. Gérer les administrateurs
3. Gérer les employés
4. Quitter
choix> _

01 — Contexte

La Maison des Ligues de Lorraine

Un responsable M2L utilise une application pour gérer les employés des ligues sportives. L'objectif : transformer une application en ligne de commande mono-utilisateur en une solution robuste, multi-utilisateurs, avec base de données centralisée.

L'application initiale, écrite en Java et fonctionnant uniquement en ligne de commande, était mono-utilisateur et utilisait une sérialisation fichier. Elle ne permettait pas la gestion décentralisée par ligue.

Le projet consistait à conserver l'architecture 3-tiers existante et d'y ajouter une couche JDBC pour la persistance MySQL, un système d'authentification sécurisé avec BCrypt, et trois niveaux d'habilitation distincts.

Chaque ligue peut désormais être gérée par son propre administrateur, de façon autonome, tandis que le super-administrateur conserve une vue et un contrôle total sur l'ensemble du système.

Type Projet scolaire
Contexte BTS SIO — PPE
Langage Java 8
Base de données MySQL 8
Build Maven 3
Sécurité BCrypt (jbcrypt 0.4)

02 — Habilitations

Trois niveaux d'accès

L'application distingue trois profils utilisateurs avec des droits progressifs, du simple employé lecture seule jusqu'au super-administrateur à accès total.

Niveau 01

Employé Simple

  • Ouvrir l'application
  • Consulter l'annuaire des employés
  • Voir les ligues existantes
  • Aucun droit d'écriture
  • Ne peut pas modifier de données

Niveau 02

Administrateur de Ligue

  • Tous les droits de l'employé simple
  • Gérer les employés de sa propre ligue
  • Ajouter / modifier / supprimer un employé
  • Interface bureau dédiée
  • Limité à sa ligue uniquement

Niveau 03

Super-Administrateur

  • Accès en écriture à tous les employés
  • Gérer les comptes administrateurs des ligues
  • Créer / supprimer des ligues
  • Accès via ligne de commande
  • Compte root unique et sécurisé

03 — Architecture

Architecture 3-tiers conservée

Le projet imposait de conserver l'architecture applicative existante. La couche données a été remplacée par une implémentation JDBC, sans altérer les couches supérieures.

01

Couche Présentation

Interface CLI

Interface en ligne de commande gérée par la bibliothèque CommandLineMenus. Les menus s'adaptent dynamiquement selon le rôle de l'utilisateur connecté.

CommandLineMenus Menus adaptatifs Login / Session
02

Couche Métier

Logique Applicative

Les classes GestionPersonnel, Ligue et Employe encapsulent les règles métier : gestion des rôles, contrôle des droits, validation des données.

GestionPersonnel Ligue Employe Passerelle (interface)
03

Couche Données

JDBC → MySQL

La classe JDBC implémente l'interface Passerelle, remplaçant la sérialisation fichier. Elle gère toutes les opérations SQL (CRUD) via PreparedStatement pour éviter les injections.

JDBC.java PreparedStatement MySQL Connector 8 Credentials.java

04 — Base de Données

Conception & Modélisation

Le MCD a été conçu pour représenter les entités principales du système et leurs relations, avant d'être traduit en schéma relationnel MySQL.

Schéma Relationnel

ligue TABLE
id_ligue INT AUTO_INCREMENT
nom VARCHAR(100)
personnels TABLE
id_personnel_ INT AUTO_INCREMENT
nom_perso VARCHAR(100)
prenom_perso VARCHAR(100)
mail_perso VARCHAR(150)
role_perso ENUM('root','admin','utilisateur')
password_perso VARCHAR(255) — BCrypt
date_arrivée DATE
date_depart_ DATE NULL
id_ligue INT — FK → ligue
Clé primaire Clé étrangère

Modèle Conceptuel de Données

MCD M2L Personnel
Cliquer pour agrandir — MCD Personnel M2L

05 — Réalisation

Travail réalisé

Le code fourni a été étudié, puis complété par l'implémentation JDBC, la sécurisation des mots de passe et l'adaptation des menus selon les droits.

storage

Implémentation JDBC

  • Classe JDBC.java implémentant l'interface Passerelle
  • Requêtes préparées (PreparedStatement) pour chaque opération CRUD
  • Chargement complet des ligues et employés au démarrage
  • Gestion des rôles root, admin et utilisateur depuis la BDD
lock

Sécurité & Authentification

  • Hashage des mots de passe avec BCrypt (jbcrypt 0.4)
  • Vérification par BCrypt.checkpw() à la connexion
  • Contrôle des droits d'accès dans chaque action
  • Gestion de l'exception DroitsInsuffisants
terminal

Interface Adaptative

  • Menus CLI différents selon le rôle connecté
  • Messages d'erreur et confirmations clairs
  • Bibliothèque CommandLineMenus pour la navigation
schema

Modélisation BDD

  • Conception du MCD et du MLD
  • Création des tables MySQL avec contraintes d'intégrité
  • Gestion des clés étrangères et des relations

Captures d'écran

Menu Principal
Menu Principal
Gestion des Ligues
Gestion des Ligues
Gestion des Employés
Gestion des Employés

06 — Technologies

Stack utilisée

Java 8
Langage principal
🗄️
MySQL 8
Base de données
🔌
JDBC
Connectivité BDD
🔐
BCrypt
Hashage mots de passe
📦
Maven
Build & dépendances

07 — Compétences développées

Ce que j'ai appris

Programmation Orientée Objet
Travail sur un code existant, compréhension du patron Singleton et du pattern Passerelle.
Conception de bases de données
Modélisation MCD → MLD → SQL, contraintes d'intégrité, relations entre tables.
JDBC & requêtes SQL
Connexion, PreparedStatement, ResultSet, gestion des exceptions SQL.
Sécurité applicative
Hashage BCrypt, contrôle d'accès par rôles, prévention des injections SQL.
Architecture logicielle
Compréhension et respect d'une architecture 3-tiers en environnement de production.
Travail sur code existant
Lecture, compréhension et extension d'un projet Java fourni, sans en briser l'architecture.

08 — Ressources

Documentation & Sources

Contact

Me contacter

mail E-Mail
call Téléphone
account_box GitHub github.com/Roxas004