Développement en JEE avec les Frameworks:
MAVEN + Spring Security
Janvier 2020
Dr. J NDONG 1
Architecture Logicielle
Présentation:
Métier DAO
framework MVC 2 Contrôleur (aiguillage)
Gestion aux données
- modèles
(POJOs)
- PrimeFaces Servlet - JavaBeans
(JSF ) fournie Spring (sessions)
par le framework:
Security Hibernate
FacesServlet Spring IOC
Données
2
Objectifs de Spring Security
Spring est un framework qui intervient dans tous les tiers d’une application. En particulier
il contient un module nommé Spring Security permettant de résoudre certains aspects liés
à la sécurité de votre application.
3
Sécuriser les mots de passe dans une base de données
Je montre comment sécuriser (crypter les mots de passe dans une application JEE). On utilise
Spring Security pour résoudre ce problème.
On suppose qu’on utilise un framework ORM de persistance tel que Hibernate.
Vous créer un Project sous Maven.
Je suppose que vous avez déjà une classe Personne ayant un champ motpasse de type String.
4
Méthode de Sécurisation des mots de passe
La méthode de sécurisation des mots par Spring est basé sur l’algorithm de
Bruce Schneier Blowfish cipher.
5
Dépendances Maven : rechercher les dépendances dans MVNrepository
Vous avez besoin de 2 dépendances Spring Security Core et Spring Security Config
Spring Security Core
6
7
Copier cette dépendance dans votre [Link].
8
Dépendances Maven ([Link])
<!-- [Link] -->
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-core</artifactId>
<version>[Link]</version>
</dependency>
<!-- [Link] -->
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-config</artifactId>
<version>[Link]</version>
</dependency>
9
Ce qu’il faut dans le projet…
Il faut créer la classe qui crypte les données. Ici on veut crypter le champ motPasse de la classe
Personne.
package [Link];
import [Link];
import [Link];
public class RealEncryption {
private Personne pers;
public RealEncryption(Personne pers){
[Link]=pers;
}
public void docry() {
class Crypt {
private void mypasscrypt() {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder ();
String hashedPassword = [Link] ([Link] ( ));
[Link] (hashedPassword);
}
}
new Crypt ( ) .mypasscrypt ( );} 10
}
Pour tester …
Personne p =(Personne) getContext ( ).getBean("pers"); // usage de Spring IOC
[Link]("mot de passe a crypter dans la base de données");
new RealEncryption(p).docry(); // Spring security pour le cryptage effectif
new PersonneHome().persist(p); // Hibernate pour enregistrer dans la BD
11
Comment tester le mot de passe à la connexion d’un utilisateur
Les mots de passe étant cryptés dans la base, lorsqu’un utilisateur se connecte sur
l’application, il faut vérifier si le mot de passe fourni en clair correspond bien à celui
qui est dans la base mais crypté. Il suffit de faire:
Avec le login de l’utilisateur, on peut effectuer une requete Hibernate
pour récupérer une instance de cette utilisateur:
Personne pers = [Link](login); //par Hibernate
et si pwd est le mot de passe en clair lors de la tentative de connexion,
on fait le test suivant pour voir si le mot de passe est correct:
if ([Link] (pwd,[Link]()))
{//code }
12
Avec l’importation import [Link];