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 1a258d1..dfccef9 100644 --- a/src/main/java/fr/eni/enchere/bll/UserService.java +++ b/src/main/java/fr/eni/enchere/bll/UserService.java @@ -6,8 +6,8 @@ import java.util.List; public interface UserService { List listeUtilisateurs(); - UserProfil utilisateurById(int id); - UserProfil utilisateurByName(String username); + 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 9938c0e..6430758 100644 --- a/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java +++ b/src/main/java/fr/eni/enchere/bll/UserServiceImpl.java @@ -21,12 +21,12 @@ public class UserServiceImpl implements UserService { } @Override - public UserProfil utilisateurById(int id) { + public UserProfil utilisateur(int id) { return userRepository.findById(id); } @Override - public UserProfil utilisateurByName(String username) { + public UserProfil userByName(String username) { return userRepository.findByUsername(username); } 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/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..e866dc1 100644 --- a/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java +++ b/src/main/java/fr/eni/enchere/security/WebSecurityConfig.java @@ -4,27 +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/**", "/searchArticle", "/profile/**").permitAll() + http.authorizeHttpRequests((requests) -> requests.requestMatchers("/", "/accueil").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("/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(); + + } + +// @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 481cc90..081eae0 100644 --- a/src/main/resources/templates/modele-page.html +++ b/src/main/resources/templates/modele-page.html @@ -88,6 +88,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é