Backend – Microservice Spring Boot
Bons d’Achat (Voucher)
Objectif
Concevoir un moteur de gestion de bons d’achat flexible et sécurisé pour gérer plusieurs types de vouchers (cadeau, employé, supporter, etc.) avec un cycle de vie complet (création, partage, consommation, blocage).
Résultat / impact
Mise en place d’un système extensible supportant plusieurs types de bons d’achat, intégrable dans l’écosystème du Crédit Mutuel du Sénégal, avec une sécurité avancée et une documentation complète pour les intégrateurs.
Technologies clés
Spring Boot, Spring Security, JWT, Spring Data JPA, MySQL, MapStruct, Lombok, iText, Spring Actuator, ReDoc, Swagger UI, Logback/Logstash.
Description du projet
Voucher est une application de gestion de bons d'achat développée avec Spring Boot. Elle permet de créer, configurer, partager et consommer des bons d'achat pour différents cas d’usage : cadeaux, avantages employés, opérations marketing, supporters, etc.
L’architecture s’appuie sur un pattern Strategy pour gérer les différents types de vouchers, des contrôles métiers fins (MCC, dates d’expiration, blocage, partage…) et une couche de sécurité avancée : authentification utilisateur par JWT + sessions serveur, authentification applicative HMAC avec anti-replay, rate limiting et audit complet des appels.
La solution est conçue pour s’intégrer facilement dans un système d’information bancaire existant, avec une documentation API riche (OpenAPI, Swagger UI, ReDoc) et des profils d’exécution adaptés (dev, preprod, prod).
Client
Crédit Mutuel du Sénégal
Rôle
Conception de l’architecture, implémentation des services backend, sécurisation de l’API, mise en place du mode bootstrap, intégration de la documentation, configuration des profils et de la journalisation.
Technologies
Spring Boot, Spring Security, Spring Data JPA, JWT, Spring Mail, Spring Actuator, MySQL, MapStruct, Lombok, Maven, iText, Logback, Logstash, OpenAPI/Swagger UI, ReDoc.
Résultats / Impact
- Architecture extensible permettant d’ajouter de nouveaux types de vouchers sans impacter l’existant (grâce au pattern Strategy).
- Sécurité renforcée via combinaison JWT + sessions serveur + App Auth HMAC + anti-replay + rate limiting.
- Expérience d’intégration améliorée pour les équipes clientes (ReDoc, Swagger UI, OpenAPI, Spring REST Docs).
- Observabilité et maintenance facilitées grâce à Actuator, Logback et Logstash.
Fonctionnalités & responsabilités
Gestion des vouchers (bons d’achat)
- Création et configuration de différents types de bons d’achat.
- Suivi complet du cycle de vie : création, consommation partielle, consommation totale.
- Blocage de bons d’achat en cas de fraude ou d’erreur.
- Partage de bons d’achat entre utilisateurs.
- Filtrage des bons d’achat par statut.
Gestion des configurations
- Configuration des types de bons d’achat.
- Gestion des codes MCC (catégories marchandes).
- Options pour bons d’achat avec ou sans crédit (logique métier dédiée).
Types de vouchers pris en charge
- Gift (cadeau)
- Employee (employé)
- Fayalma
- Supporter (sympathisant)
Architecture et extensibilité
- Pattern Strategy pour basculer entre types de bons d’achat.
- Service de stratégie basé sur une (association type → implémentation).
- Contrôleur qui délègue aux stratégies (ajout de nouveaux types sans impacter l’existant).
Création de bons d’achat (détails)
- Paramétrage du montant.
- Date d’expiration configurable.
- Type (cadeau, employé, supporter, etc.).
- Options de partage (partageable ou non).
- Restrictions par catégories marchandes (MCC).
Consommation de bons d’achat (détails)
- Validation du bon d’achat avant consommation.
- Vérification des restrictions : catégorie marchande, date d’expiration, statut, etc.
- Traitement de la consommation (totale ou partielle).
- Mise à jour du statut du bon d’achat.
Partage de bons d’achat (détails)
- Partage entre utilisateurs pour les bons configurés comme partageables.
- Génération d’un identifiant unique end-to-end.
- Validation du propriétaire et de l’état du bon avant partage.
Sécurité (User Auth via JWT + sessions serveur)
- Authentification JWT (Bearer) pour les utilisateurs.
- Sessions côté serveur avec contraintes et révocation.
- Rotation sécurisée du refresh token et détection de réutilisation (reuse detection).
- Lien optionnel au sous-réseau IP du client et à la famille du User-Agent (contexte).
- Timeouts d’inactivité (idle) et timeout absolu de session.
-
Mise à jour maîtrisée du
lastSeen(au plus une fois par minute). -
Endpoints :
/auth/login,/auth/refresh,/auth/logout. -
Prise en compte de
X-Forwarded-Forderrière proxy. -
Limitation des sessions concurrentes, configurable par rôle
(ex. :
ROLE_USER,ROLE_ADMIN). - Propriétés de configuration dédiées (JWT, timeouts, TTL refresh, contraintes IP/UA).
Sécurité applicative (App Auth HMAC + Anti-replay) pour les clients applicatifs
-
En-têtes requis :
X-Client-Id,X-Client-Secret,X-Nonce(unique),X-Timestamp,X-Signature. -
Signature HMAC-SHA256 sur la concaténation
METHOD|PATH|TIMESTAMP|NONCE|BODY. - Anti-replay : fenêtre temporelle, nonce one-time, contrôle du corps (brut).
- Gestion d’erreurs standardisées (400 / 401 / 403 / 429).
- Rate limiting (retour 429 quand le quota est atteint).
Gestion des applications clientes
- Activer/Désactiver l’authentification par application.
- Allowlist IP par application (CIDR).
- Rotation des secrets (2 secrets valides max, période de grâce).
-
Audit : journalisation
clientId, IP, endpoint, statut rate-limit, décision d’accès.
Mode Bootstrap (mise en route one-time)
- Variables d’environnement/système pour activer et sécuriser le bootstrap.
- Endpoints dédiés : statut, création du super admin, création d’app, désactivation du bootstrap.
- Possibilité de bypass ou non l’Anti-replay selon configuration.
Documentation API intégrée
- ReDoc (page
redoc.html). - Swagger UI (
/swagger-ui). - Spécifications OpenAPI disponibles en JSON et YAML.
- Spring REST Docs (pages HTML de documentation).