Architecture interne de AmapJ
Cette partie est réservée aux développeurs Java qui souhaiteraient connaître le fonctionnement interne de AmapJ (au niveau du code lui même)
Introduction
AmapJ est écrit en Java, en s'appuyant sur le framework Vaadin
AmapJ s'appuie sur un moteur de servlet, comme par exemple Tomcat.
AmapJ peut s'utiliser sans ou avec une base de données externe. Dans le cas "sans base de données externe", une base de données est créée en interne avec HSQLDB.
La gestion des transactions
La gestion des transactions (début de transaction, fin de transaction avec COMMIT ou ROLLBACK) est réalisée grâce à AspectJ
Le fonctionnement est le suivant:
- Des annotations @DbRead et @DbWrite sont placées dans le code, avant certaines fonctions
- Avec AspectJ, il est possible d'intercepter tous les appels aux méthodes comportant ces annotations
- A ce niveau là, avant et après la méthode, la transaction est initiée ou terminée
L'utilisation de AspectJ est indispensable pour le bon fonctionnement de AmapJ !
La gestion des logs
La gestion des logs est réalisée avec log4j2
Plus de détails sur log4J2
La gestion des mots de passe
Pour des raisons de sécurité, les mots de passe sont stockés sous la forme d'un hash dans la base de données, avec l'emploi d'un salt (sel).
Les mots de passe ne peuvent pas être retrouvés, par qui que ce soit. Les mots de passe ne sont pas décryptables.
Cet article explique bien la problèmatique générale : https://en.wikipedia.org/wiki/Rainbow_table
Plus concrétement, AmapJ utilise la méthode suivante à la création du mot de passe
- Calcul d'un salt, et sauvegarde de celui ci dans la base
- A partir du password, du salt, calcul d'un hash en iterant 2000 fois sur l'algorithme PBKDF2 avec SHA-1 comme algorithme de hash
- L'empreinte obtenue est sauvegardée dans la base
Pour la vérification du mot de passe , AmapJ utilise la méthode suivante
- Récupération du salt depuis la base de données
- A partir du password à vérifier, du salt, calcul d'un hash en iterant 2000 fois sur l'algorithme PBKDF2 avec SHA-1 comme algorithme de hash
- L'empreinte obtenue est alors comparée à celle dans la base : si elles sont égales, alors le mot de passe est correct.
L'algorithme PBKDF2 avec SHA-1 comme algorithme de hash est irreversible , à partir du hash (l'empreinte) on ne peut pas retrouver le mot de passe.