From 39efe3212f434f27fd38977ef2a550341169cade Mon Sep 17 00:00:00 2001 From: jleroy Date: Tue, 23 Apr 2024 10:34:47 +0200 Subject: [PATCH] Connexion page --- .../java/fr/eni/enchere/bll/UserService.java | 8 ++-- .../fr/eni/enchere/bll/UserServiceImpl.java | 8 ++-- .../enchere/bo/{User.java => UserProfil.java} | 12 +++--- .../controllers/InscriptionController.java | 6 +-- .../fr/eni/enchere/dal/UserRepository.java | 9 ++-- .../eni/enchere/dal/UserRepositoryImpl.java | 34 +++++++++++++-- .../fr/eni/enchere/security/LoginService.java | 42 +++++++++++++++++++ .../enchere/security/WebSecurityConfig.java | 10 ----- src/main/resources/templates/login.html | 31 +++++++------- 9 files changed, 111 insertions(+), 49 deletions(-) rename src/main/java/fr/eni/enchere/bo/{User.java => UserProfil.java} (87%) create mode 100644 src/main/java/fr/eni/enchere/security/LoginService.java diff --git a/src/main/java/fr/eni/enchere/bll/UserService.java b/src/main/java/fr/eni/enchere/bll/UserService.java index ba1926f..b3b55ec 100644 --- a/src/main/java/fr/eni/enchere/bll/UserService.java +++ b/src/main/java/fr/eni/enchere/bll/UserService.java @@ -1,12 +1,12 @@ package fr.eni.enchere.bll; -import fr.eni.enchere.bo.User; +import fr.eni.enchere.bo.UserProfil; import java.util.List; public interface UserService { - List listeUtilisateurs(); - User utilisateur(int id); - void setUtilisateur(User utilisateur); + List listeUtilisateurs(); + UserProfil utilisateur(int id); + void setUtilisateur(UserProfil utilisateur); void deleteUtilisateur(int id); } diff --git a/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java b/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java index 616014f..dec1e94 100644 --- a/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java +++ b/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java @@ -1,6 +1,6 @@ package fr.eni.enchere.bll; -import fr.eni.enchere.bo.User; +import fr.eni.enchere.bo.UserProfil; import fr.eni.enchere.dal.UserRepository; import org.springframework.stereotype.Service; @@ -16,17 +16,17 @@ public class UserServiceImpl implements UserService { } @Override - public List listeUtilisateurs() { + public List listeUtilisateurs() { return userRepository.findAll(); } @Override - public User utilisateur(int id) { + public UserProfil utilisateur(int id) { return userRepository.findById(id); } @Override - public void setUtilisateur(User utilisateur) { + public void setUtilisateur(UserProfil utilisateur) { userRepository.save(utilisateur); } diff --git a/src/main/java/fr/eni/enchere/bo/User.java b/src/main/java/fr/eni/enchere/bo/UserProfil.java similarity index 87% rename from src/main/java/fr/eni/enchere/bo/User.java rename to src/main/java/fr/eni/enchere/bo/UserProfil.java index e177db6..4c17b05 100644 --- a/src/main/java/fr/eni/enchere/bo/User.java +++ b/src/main/java/fr/eni/enchere/bo/UserProfil.java @@ -1,6 +1,6 @@ package fr.eni.enchere.bo; -public class User { +public class UserProfil { //Déclaration de variable private int id; @@ -13,13 +13,13 @@ public class User { private String code_postal; private String ville; private String password; //Voir la sécurité du mot de passe - private int credit; + private float credit; private boolean isAdmin; //Constructeur - public User(){} + public UserProfil(){} - public User(int id, String pseudo, String nom, String prenom, String email, String telephone, String rue, String code_postal, String ville, String password, int credit, boolean isAdmin) { + public UserProfil(int id, String pseudo, String nom, String prenom, String email, String telephone, String rue, String code_postal, String ville, String password, int credit, boolean isAdmin) { setId(id); setPrenom(prenom); setNom(nom); @@ -115,11 +115,11 @@ public class User { this.password = password; } - public int getCredit() { + public float getCredit() { return credit; } - public void setCredit(int credit) { + public void setCredit(float credit) { this.credit = credit; } diff --git a/src/main/java/fr/eni/enchere/controllers/InscriptionController.java b/src/main/java/fr/eni/enchere/controllers/InscriptionController.java index 25aff1c..c761c2f 100644 --- a/src/main/java/fr/eni/enchere/controllers/InscriptionController.java +++ b/src/main/java/fr/eni/enchere/controllers/InscriptionController.java @@ -1,7 +1,7 @@ package fr.eni.enchere.controllers; import fr.eni.enchere.bll.UserService; -import fr.eni.enchere.bo.User; +import fr.eni.enchere.bo.UserProfil; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -21,12 +21,12 @@ public class InscriptionController { @GetMapping public String viewInscription(Model model) { - model.addAttribute("user", new User()); + model.addAttribute("user", new UserProfil()); return "inscription"; } @PostMapping("/newUser") - public String setUser(@ModelAttribute User user) { + public String setUser(@ModelAttribute UserProfil user) { userService.setUtilisateur(user); return "redirect:/accueil"; } diff --git a/src/main/java/fr/eni/enchere/dal/UserRepository.java b/src/main/java/fr/eni/enchere/dal/UserRepository.java index b26b458..cd03bae 100644 --- a/src/main/java/fr/eni/enchere/dal/UserRepository.java +++ b/src/main/java/fr/eni/enchere/dal/UserRepository.java @@ -1,12 +1,13 @@ package fr.eni.enchere.dal; -import fr.eni.enchere.bo.User; +import fr.eni.enchere.bo.UserProfil; import java.util.List; public interface UserRepository { - List findAll(); - User findById(int id); - void save(User utilisateur); + List findAll(); + UserProfil findById(int id); + UserProfil findByUsername(String username); + void save(UserProfil utilisateur); void delete(int id); } diff --git a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java index 4bd9213..746744c 100644 --- a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java @@ -1,6 +1,6 @@ package fr.eni.enchere.dal; -import fr.eni.enchere.bo.User; +import fr.eni.enchere.bo.UserProfil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate; @@ -10,7 +10,9 @@ import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; import org.springframework.stereotype.Repository; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Repository @Primary @@ -26,17 +28,41 @@ public class UserRepositoryImpl implements UserRepository { } @Override - public List findAll() { + public List findAll() { return List.of(); } @Override - public User findById(int id) { + public UserProfil findById(int id) { return null; } @Override - public void save(User utilisateur) { + public UserProfil findByUsername(String username) { + String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = :username OR email = :username"; + Map params = new HashMap<>(); + params.put("username", username); + UserProfil user = namedParameterJdbcTemplate.queryForObject(sql, params, (rs, rowNum) -> { + UserProfil userProfile = new UserProfil(); + userProfile.setId(rs.getInt("no_utilisateur")); + userProfile.setPrenom(rs.getString("prenom")); + userProfile.setNom(rs.getString("nom")); + userProfile.setPseudo(rs.getString("pseudo")); + userProfile.setEmail(rs.getString("email")); + userProfile.setTelephone(rs.getString("telephone")); + userProfile.setRue(rs.getString("rue")); + userProfile.setCode_postal(rs.getString("code_postal")); + userProfile.setVille(rs.getString("ville")); + userProfile.setPassword(rs.getString("mot_de_passe")); + userProfile.setCredit(rs.getFloat("credit")); + userProfile.setAdmin(rs.getBoolean("administrateur")); + return userProfile; + }); + return user; + } + + @Override + public void save(UserProfil utilisateur) { if (utilisateur.getId() == 0) { String sql = "INSERT INTO UTILISATEURS (pseudo, nom, prenom, email, telephone, rue, code_postal, ville, mot_de_passe, credit, administrateur) VALUES (:pseudo, :nom, :prenom, :email, :telephone, :rue, :code_postal, :ville, :mot_de_passe, 0, false)"; MapSqlParameterSource parameters = new MapSqlParameterSource(); diff --git a/src/main/java/fr/eni/enchere/security/LoginService.java b/src/main/java/fr/eni/enchere/security/LoginService.java new file mode 100644 index 0000000..a6abf03 --- /dev/null +++ b/src/main/java/fr/eni/enchere/security/LoginService.java @@ -0,0 +1,42 @@ +package fr.eni.enchere.security; + +import fr.eni.enchere.bo.UserProfil; +import fr.eni.enchere.dal.UserRepository; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.User.UserBuilder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Component; + +@Component +public class LoginService implements UserDetailsService { + + private UserRepository userRep; + + public LoginService(UserRepository userRep) { + this.userRep = userRep; + } + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + // Charger l'utilisateur depuis la base de données + UserProfil utilisateur = userRep.findByUsername(username); + + // Créer un nouvel objet UserBuilder + UserBuilder userBuilder = User.builder() + .username(utilisateur.getPseudo()) + .password(utilisateur.getPassword()); + + // Ajouter les rôles en fonction de isAdmin() + if(utilisateur.isAdmin()) { + userBuilder.roles("ADMIN", "MEMBRE"); + } else { + userBuilder.roles("MEMBRE"); + } + + // Retourner l'utilisateur UserDetails construit + return userBuilder.build(); + } + +} diff --git a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java index 7036e23..79e0542 100644 --- a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java +++ b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java @@ -4,8 +4,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.crypto.factory.PasswordEncoderFactories; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @@ -28,12 +26,4 @@ public class WebSecurityConfig { return http.build(); } - @Bean - public PasswordEncoder encoder() { - // Production : - return PasswordEncoderFactories.createDelegatingPasswordEncoder(); - // Dev/test - //return NoOpPasswordEncoder.getInstance(); - } - } diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index d07f4f2..432314d 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -4,20 +4,23 @@ -
-

Pour se Connecter :

-
-
-
-
-
-
-
- Identifiant ou mot de passe incorrect +
+

Pour se Connecter :

+
+
+
+
+
+ +
+
+
+ Identifiant ou mot de passe incorrect +
+
+ Vous avez été déconnecté +
+
-
- Vous avez été déconnecté -
-
\ No newline at end of file