From 7e51af9a4ca237f962cab6ea24a4c99551adf9e6 Mon Sep 17 00:00:00 2001 From: Parpaillax Date: Tue, 23 Apr 2024 14:57:37 +0200 Subject: [PATCH] connexion done --- build.gradle | 1 + .../java/fr/eni/enchere/bll/UserService.java | 1 + .../fr/eni/enchere/bll/UserServiceImpl.java | 5 +++ .../controllers/AccueilController.java | 5 --- .../enchere/controllers/LoginController.java | 40 ++++++++++++++++++ .../fr/eni/enchere/controllers/MvcConfig.java | 12 ++++++ .../eni/enchere/dal/UserRepositoryImpl.java | 41 +++++++++++-------- .../fr/eni/enchere/security/LoginService.java | 27 +++++------- .../eni/enchere/security/SecurityConfig.java | 8 ++-- .../enchere/security/WebSecurityConfig.java | 21 ++++++++-- src/main/resources/templates/modele-page.html | 1 + .../templates/{ => security}/login.html | 10 ++++- 12 files changed, 123 insertions(+), 49 deletions(-) create mode 100644 src/main/java/fr/eni/enchere/controllers/LoginController.java create mode 100644 src/main/java/fr/eni/enchere/controllers/MvcConfig.java rename src/main/resources/templates/{ => security}/login.html (72%) diff --git a/build.gradle b/build.gradle index f4815e9..7d769d9 100644 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,7 @@ repositories { } dependencies { + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/fr/eni/enchere/bll/UserService.java b/src/main/java/fr/eni/enchere/bll/UserService.java index b3b55ec..dfccef9 100644 --- a/src/main/java/fr/eni/enchere/bll/UserService.java +++ b/src/main/java/fr/eni/enchere/bll/UserService.java @@ -7,6 +7,7 @@ import java.util.List; public interface UserService { List listeUtilisateurs(); UserProfil utilisateur(int id); + UserProfil userByName(String username); 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 dec1e94..6430758 100644 --- a/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java +++ b/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java @@ -25,6 +25,11 @@ public class UserServiceImpl implements UserService { return userRepository.findById(id); } + @Override + public UserProfil userByName(String username) { + return userRepository.findByUsername(username); + } + @Override public void setUtilisateur(UserProfil utilisateur) { userRepository.save(utilisateur); diff --git a/src/main/java/fr/eni/enchere/controllers/AccueilController.java b/src/main/java/fr/eni/enchere/controllers/AccueilController.java index b577289..f32b30e 100644 --- a/src/main/java/fr/eni/enchere/controllers/AccueilController.java +++ b/src/main/java/fr/eni/enchere/controllers/AccueilController.java @@ -25,9 +25,4 @@ public class AccueilController { return "accueil"; } - @GetMapping("/login") - public String login(Model modele) { - return "login"; - } - } diff --git a/src/main/java/fr/eni/enchere/controllers/LoginController.java b/src/main/java/fr/eni/enchere/controllers/LoginController.java new file mode 100644 index 0000000..d938a43 --- /dev/null +++ b/src/main/java/fr/eni/enchere/controllers/LoginController.java @@ -0,0 +1,40 @@ +package fr.eni.enchere.controllers; + +import fr.eni.enchere.bll.UserService; +import fr.eni.enchere.bo.UserProfil; +import fr.eni.enchere.dal.UserRepository; +import jakarta.servlet.http.HttpSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +public class LoginController { + + @Autowired + private UserService userService; + + public LoginController(UserService userService) { + super(); + this.userService = userService; + } + + @GetMapping("/login") + public String login(Model modele) { + return "security/login"; + } + + @PostMapping("/login") + public String login(@RequestParam("username") String username, @RequestParam("password") String password, HttpSession session) { + UserProfil user = userService.userByName(username); + System.out.println("test"); + if (user != null && user.getPassword().equals(password)) { + return "redirect:/accueil"; + } else { + return "redirect:/security/login?error"; + } + } +} diff --git a/src/main/java/fr/eni/enchere/controllers/MvcConfig.java b/src/main/java/fr/eni/enchere/controllers/MvcConfig.java new file mode 100644 index 0000000..43263e9 --- /dev/null +++ b/src/main/java/fr/eni/enchere/controllers/MvcConfig.java @@ -0,0 +1,12 @@ +package fr.eni.enchere.controllers; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class MvcConfig implements WebMvcConfigurer { + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/login").setViewName("security/login"); + } +} diff --git a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java index b0fcda9..7083441 100644 --- a/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java +++ b/src/main/java/fr/eni/enchere/dal/UserRepositoryImpl.java @@ -3,6 +3,7 @@ package fr.eni.enchere.dal; import fr.eni.enchere.bo.UserProfil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; @@ -43,26 +44,30 @@ public class UserRepositoryImpl implements UserRepository { @Override public UserProfil findByUsername(String username) { - String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = :username OR email = :username"; + String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = :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; + try { + 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; + } catch (EmptyResultDataAccessException err) { + return null; + } } @Override diff --git a/src/main/java/fr/eni/enchere/security/LoginService.java b/src/main/java/fr/eni/enchere/security/LoginService.java index dab7dde..cf8cedc 100644 --- a/src/main/java/fr/eni/enchere/security/LoginService.java +++ b/src/main/java/fr/eni/enchere/security/LoginService.java @@ -2,13 +2,10 @@ package fr.eni.enchere.security; import fr.eni.enchere.bo.UserProfil; import fr.eni.enchere.dal.UserRepository; -import org.springframework.beans.factory.annotation.Autowired; 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.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; @Component @@ -16,7 +13,6 @@ public class LoginService implements UserDetailsService { private UserRepository userRep; - @Autowired public LoginService(UserRepository userRep) { this.userRep = userRep; } @@ -24,20 +20,19 @@ public class LoginService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // Charger l'utilisateur depuis la base de données - UserProfil utilisateur = userRep.findByUsername(username); + UserProfil utilisateur = this.userRep.findByUsername(username); + UserDetails userDetails = null; // 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"); + if (utilisateur != null) { + userDetails = User.builder() + .username(utilisateur.getPseudo()) + .password(utilisateur.getPassword()) + .roles(utilisateur.isAdmin() ? "ADMIN" : "MEMBRE") + .build(); } else { - userBuilder.roles("MEMBRE"); + throw new UsernameNotFoundException("Les identifiants sont incorrect !"); } - - // Retourner l'utilisateur UserDetails construit - return userBuilder.build(); + return userDetails; } -} +} \ No newline at end of file diff --git a/src/main/java/fr/eni/enchere/security/SecurityConfig.java b/src/main/java/fr/eni/enchere/security/SecurityConfig.java index 8597d7c..1410db7 100644 --- a/src/main/java/fr/eni/enchere/security/SecurityConfig.java +++ b/src/main/java/fr/eni/enchere/security/SecurityConfig.java @@ -8,9 +8,9 @@ import org.springframework.security.crypto.password.PasswordEncoder; @Configuration public class SecurityConfig { - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } +// @Bean +// public PasswordEncoder passwordEncoder() { +// return new BCryptPasswordEncoder(); +// } } diff --git a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java index 79e0542..e866dc1 100644 --- a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java +++ b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java @@ -4,26 +4,39 @@ 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.bcrypt.BCryptPasswordEncoder; +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; @Configuration @EnableWebSecurity -public class WebSecurityConfig { +public class WebSecurityConfig{ @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests((requests) -> requests.requestMatchers("/", "/accueil").permitAll() - .requestMatchers("/accueil", "/login", "/inscription").permitAll() + .requestMatchers("/login").permitAll() .requestMatchers("/css/**", "/images/**", "/assets/**", "/img/**", "/js/**").permitAll() .requestMatchers("/admin").hasRole("ADMIN") .anyRequest().authenticated()) .formLogin((form) -> form.loginPage("/login").defaultSuccessUrl("/", true)) - .logout((logout) -> logout.clearAuthentication(true).invalidateHttpSession(true) - .deleteCookies("JSESSIONID").logoutSuccessUrl("/filmLogout") + .logout((logout) -> logout.clearAuthentication(true).invalidateHttpSession(true).deleteCookies("JSESSIONID").logoutSuccessUrl("/filmLogout") .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll()); return http.build(); } + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + + } + +// @Bean +// public PasswordEncoder passwordEncoder() { +// return PasswordEncoderFactories.createDelegatingPasswordEncoder(); +// } + } diff --git a/src/main/resources/templates/modele-page.html b/src/main/resources/templates/modele-page.html index 635630d..94e2d68 100644 --- a/src/main/resources/templates/modele-page.html +++ b/src/main/resources/templates/modele-page.html @@ -85,6 +85,7 @@ © 2024 Copyright: + \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/security/login.html similarity index 72% rename from src/main/resources/templates/login.html rename to src/main/resources/templates/security/login.html index 432314d..9fdbcb1 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/security/login.html @@ -8,8 +8,14 @@

Pour se Connecter :


-
-
+
+ + +
+
+ + +
Mot de passe oublié