SMA — Intranet maintenance automobile en cours
Objectif
SMA est une application intranet de maintenance automobile développée comme un projet terrain. L’objectif n’est pas seulement de gérer des données métier, mais de construire un socle applicatif traçable, sécurisé, maintenable et auditable.
Le projet met l’accent sur l’architecture backend Java/Spring, la séparation des responsabilités, la sécurité OAuth2/OIDC, la conformité RGPD, les logs structurés et le versionnement fiable des évolutions SQL.
SMA sert aussi de support pour travailler des problématiques proches d’un système réel : contrôle d’accès, audit métier, historique des actions, exploitation locale reproductible et qualité logicielle continue.
Compétences démontrées
- Conception d’une architecture CQRS / Event Sourcing avec Axon.
- Séparation claire entre interface web, API backend, données métier et audit.
- Sécurité OAuth2 / OpenID Connect avec Keycloak.
- Gestion des rôles, des accès et de la propriété des ressources.
- Implémentation d’une politique de logs métier, technique, sécurité et audit.
- Prise en compte RGPD : traçabilité, preuves opérationnelles, contrôles et gouvernance.
- Versionnement des scripts SQL avec Flyway.
- Contrôles qualité et analyse statique avec SonarQube.
- Environnement local reproductible avec Docker Compose.
Stack actuelle
- Langage : Java 17
- Backend : Spring Boot, Spring WebFlux, Axon Framework, JPA / Hibernate
- Frontend : Spring MVC, Thymeleaf, Thymeleaf Layout Dialect
- Architecture : CQRS, Event Sourcing, projections PostgreSQL
- Base de données : PostgreSQL
- Migrations SQL : Flyway
- Sécurité : OAuth2 / OpenID Connect, Keycloak, JWT, RBAC
- Audit : base dédiée, événements d’audit, contrôles RGPD, preuves opérationnelles
- Qualité : SonarQube, conventions de logs, séparation des responsabilités
- Exécution locale : Docker Compose, scripts de lancement
Architecture
Le projet applique les principes CQRS et Event Sourcing. Les commandes, événements, projections et contrôles d’audit sont séparés pour garder une trace claire des changements métier.
Organisation du projet
- backend/ : cœur métier CQRS, sécurité, projections, audit.
- frontend/ : interface Spring MVC / Thymeleaf.
- docker/ : environnement local reproductible.
- docs/ : architecture, sécurité, audit et stratégie de logs.
Sécurité : RBAC et propriété des ressources
Le projet intègre maintenant un contrôle d’accès basé sur les rôles et sur la propriété des ressources. Les tokens JWT Keycloak sont validés côté backend, puis les rôles sont extraits depuis les claims du token.
- ADMIN : accès global aux ressources métier.
- USER : accès limité aux ressources qui lui appartiennent.
- AUDITOR : accès lecture globale pour les besoins d’audit, sans modification métier.
Les lectures par identifiant et les listes sont filtrées afin d’éviter les accès directs non autorisés aux objets métier, notamment les risques de type IDOR.
Logs et audit
Une politique de logs complète a été ajoutée afin de distinguer les événements métier, techniques et sécurité. Les logs frontend et backend sont séparés, avec des fichiers dédiés selon leur usage.
- Logs métier : actions fonctionnelles, événements business, accès UI.
- Logs techniques : erreurs serveur, requêtes HTTP, exceptions, diagnostic runtime.
- Logs sécurité : accès refusés, requêtes suspectes, chemins ou méthodes anormales.
Une base d’audit dédiée permet également de suivre les preuves opérationnelles et les attentes d’un audit indépendant. L’objectif est de rendre les contrôles consultables, historisés et exploitables.
- audit_events : preuves opérationnelles horodatées.
- audit_expectations : référentiel des attentes d’audit.
- audit_expectation_checks : historique des contrôles indépendants.
- audit_expectations_latest : vue de synthèse pour cockpit d’audit.
CQRS / Axon : flux de création
Le flux de création a été stabilisé afin d’éviter les incohérences entre l’envoi d’une commande Axon et la persistance effective de la projection en base.
HTTP POST
→ CommandController
→ CommandService
→ CommandGateway Axon
→ Aggregate @CommandHandler
→ apply(*CreatedEvent)
→ EventHandler Axon
→ persistance JPA
→ publication d’un Spring ApplicationEvent après persistance
→ complétion de la CompletableFuture
→ réponse HTTP
Roadmap
- Étendre progressivement les règles métier liées à la maintenance automobile.
- Renforcer les tests automatisés sur les flux critiques : sécurité, audit, commandes et projections.
- Améliorer les recherches métier avec des index PostgreSQL et des projections adaptées.
- Stabiliser la chaîne qualité avec SonarQube et des contrôles CI plus réguliers.
- Ajouter des tableaux de bord pour visualiser les événements métier, les logs et les contrôles d’audit.
- Explorer des cas d’usage ML uniquement s’ils servent un besoin métier réel : maintenance préventive ou détection d’anomalies.
Exécution locale
- Mode sécurisé :
./scripts/dev.sh secure - Mode rapide :
./scripts/dev.sh fast - Arrêter :
./scripts/dev.sh down - Ouvrir les services :
./scripts/dev.sh open
Services disponibles en local
- Frontend Thymeleaf :
http://localhost:8091 - Backend API :
http://localhost:8092 - Axon Server :
http://localhost:8024 - Keycloak :
http://localhost:8080 - PostgreSQL métier :
localhost:5432
Profils et modes
secure: mode complet avec Keycloak et sécurité activée.fast: mode rapide pour debug court, sans login applicatif.local: exécution locale hors conteneur applicatif.prod: exécution via Docker Compose.