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/controllers/AccueilController.java b/src/main/java/fr/eni/enchere/controllers/AccueilController.java index 4cd0d74..0470afa 100644 --- a/src/main/java/fr/eni/enchere/controllers/AccueilController.java +++ b/src/main/java/fr/eni/enchere/controllers/AccueilController.java @@ -48,9 +48,4 @@ public class AccueilController { return viewAccueil(searchTitle, searchCategory, model); } - @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..cbe15e2 --- /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.utilisateurByName(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/controllers/ProfileController.java b/src/main/java/fr/eni/enchere/controllers/ProfileController.java index 392eccd..1a5d887 100644 --- a/src/main/java/fr/eni/enchere/controllers/ProfileController.java +++ b/src/main/java/fr/eni/enchere/controllers/ProfileController.java @@ -27,11 +27,11 @@ public class ProfileController { // Obtenez l'authentification actuelle Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // Vérifiez si l'utilisateur est authentifié - if (!authentication.getName().equals("anonymousUser") || true) { //Retirer le true pour le bon fonctionnement + if (!authentication.getName().equals("anonymousUser")) { //Retirer le true pour le bon fonctionnement // Obtenez les détails de l'utilisateur authentifié String username = authentication.getName(); // Utilisez le service approprié pour récupérer les informations de l'utilisateur à partir du nom d'utilisateur - UserProfil userProfile = userService.utilisateurByName("Jojo"); + UserProfil userProfile = userService.utilisateurByName(username); // Ajoutez les informations du profil à l'objet Model pour les afficher dans la page HTML model.addAttribute("user", new UserProfil()); model.addAttribute("userProfile", userProfile); @@ -47,7 +47,7 @@ public class ProfileController { // Obtenez les détails de l'utilisateur authentifié String username = authentication.getName(); // Utilisez le service approprié pour récupérer les informations de l'utilisateur à partir du nom d'utilisateur - UserProfil userProfile = userService.utilisateurByName("Jojo"); + UserProfil userProfile = userService.utilisateurByName(username); System.out.println(userProfile.getId()); //Supprimer le compte userService.deleteUtilisateur(userProfile.getId()); 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 c8a3ee5..1f4e974 100644 --- a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java +++ b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java @@ -4,27 +4,35 @@ 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/**", "/searchArticle", "/profile/**").permitAll() + http.authorizeHttpRequests((requests) -> requests.requestMatchers("/", "/accueil").permitAll() + .requestMatchers("/login").permitAll() .requestMatchers("/css/**", "/images/**", "/assets/**", "/img/**", "/js/**").permitAll() + .requestMatchers("/article/**").authenticated() .requestMatchers("/admin").hasRole("ADMIN") .anyRequest().authenticated()) .formLogin((form) -> form.loginPage("/login").defaultSuccessUrl("/", true)) - .logout((logout) -> logout.clearAuthentication(true).invalidateHttpSession(true) - .deleteCookies("JSESSIONID").logoutSuccessUrl("/logout") + .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(); + + } + } diff --git a/src/main/resources/templates/modele-page.html b/src/main/resources/templates/modele-page.html index 481cc90..8980238 100644 --- a/src/main/resources/templates/modele-page.html +++ b/src/main/resources/templates/modele-page.html @@ -25,7 +25,7 @@ Vendre un article