diff --git a/pom.xml b/pom.xml
index 7862c0b..08f2cc7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,12 @@
org.mariadb.jdbc
mariadb-java-client
+
+
+ org.springframework.data
+ spring-data-jpa
+
+
@@ -57,24 +63,13 @@
bootstrap
5.2.2
-
-
- org.thymeleaf.extras
- thymeleaf-extras-springsecurity5
- 3.0.4.RELEASE
-
+
org.webjars.bower
jquery
3.6.1
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
org.webjars
@@ -104,12 +99,19 @@
org.springframework.boot
spring-boot-starter-security
+
org.springframework.security
- spring-security-test
- test
+ spring-security-web
-
+
+
+ org.springframework.security
+ spring-security-config
+
+
+
+
diff --git a/src/main/java/com/cristobalbernal/foro/Respositorios/ICategoriaForo.java b/src/main/java/com/cristobalbernal/foro/Respositorios/ICategoriaForo.java
index d92975c..3e35934 100644
--- a/src/main/java/com/cristobalbernal/foro/Respositorios/ICategoriaForo.java
+++ b/src/main/java/com/cristobalbernal/foro/Respositorios/ICategoriaForo.java
@@ -1,4 +1,8 @@
package com.cristobalbernal.foro.Respositorios;
-public interface ICategoriaForo {
+import com.cristobalbernal.foro.Entidades.CategoriaForoEntity;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ICategoriaForo extends JpaRepository {
+
}
diff --git a/src/main/java/com/cristobalbernal/foro/Respositorios/IUsers.java b/src/main/java/com/cristobalbernal/foro/Respositorios/IUsers.java
index 93d71d8..5d74dd7 100644
--- a/src/main/java/com/cristobalbernal/foro/Respositorios/IUsers.java
+++ b/src/main/java/com/cristobalbernal/foro/Respositorios/IUsers.java
@@ -2,7 +2,9 @@ package com.cristobalbernal.foro.Respositorios;
import com.cristobalbernal.foro.Entidades.UsersEntity;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.web.bind.annotation.PostMapping;
-public interface IUsers extends JpaRepository {
+public interface IUsers extends JpaRepository {
+ UsersEntity findByEmail(String email);
}
diff --git a/src/main/java/com/cristobalbernal/foro/Servicios/ServicioRespuestas.java b/src/main/java/com/cristobalbernal/foro/Servicios/ServicioRespuestas.java
index 08dee83..85dbe75 100644
--- a/src/main/java/com/cristobalbernal/foro/Servicios/ServicioRespuestas.java
+++ b/src/main/java/com/cristobalbernal/foro/Servicios/ServicioRespuestas.java
@@ -16,12 +16,6 @@ public class ServicioRespuestas {
@PostConstruct
public void init(){
- /*
- respuestas = new RespuestasEntity[6];
- respuestas[0] = new RespuestasEntity(0, "TITULO 1", "aslkjbdakjdbkajwdbjakwdbkawjdbawkd.bawdawd" +
- "adaw,dbakwjdbawkjd,abjwkd,awk,dad" +
- "awda,wbjdwakjdawkjdawdblaw");
- */
}
}
diff --git a/src/main/java/com/cristobalbernal/foro/Servicios/ServicioUser.java b/src/main/java/com/cristobalbernal/foro/Servicios/ServicioUser.java
new file mode 100644
index 0000000..dbc9e71
--- /dev/null
+++ b/src/main/java/com/cristobalbernal/foro/Servicios/ServicioUser.java
@@ -0,0 +1,28 @@
+package com.cristobalbernal.foro.Servicios;
+
+import com.cristobalbernal.foro.Entidades.Foro;
+import com.cristobalbernal.foro.Entidades.UsersEntity;
+import com.cristobalbernal.foro.Respositorios.IForo;
+import com.cristobalbernal.foro.Respositorios.IUsers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ServicioUser {
+ @Autowired
+ private IUsers iUsers;
+
+ public List init(){
+ return iUsers.findAll();
+ }
+
+ /*
+ public UsersEntity findById(long id){
+ return iUsers.findById((int) id).orElse(null);
+ }
+ */
+
+
+}
diff --git a/src/main/java/com/cristobalbernal/foro/controlador/Controlador.java b/src/main/java/com/cristobalbernal/foro/controlador/Controlador.java
index d66332e..3c1de52 100644
--- a/src/main/java/com/cristobalbernal/foro/controlador/Controlador.java
+++ b/src/main/java/com/cristobalbernal/foro/controlador/Controlador.java
@@ -7,10 +7,12 @@ import com.cristobalbernal.foro.Respositorios.IUsers;
import com.cristobalbernal.foro.Servicios.ServicioForo;
import com.cristobalbernal.foro.Servicios.ServicioRespuestas;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@@ -34,12 +36,12 @@ public class Controlador {
return "index";
}
@GetMapping("/login")
- public String login(){
+ public String login(Model model){
return "login/login";
}
@GetMapping("/registrar")
public String registrar(){
- return "Registrar/registrar";
+ return "Registrar/Registrar";
}
@GetMapping("/crearPregunta")
public String pregunta(){
@@ -56,5 +58,14 @@ public class Controlador {
public @ResponseBody List getAllUsers(){
return iUsers.findAll();
}
+
+ @PostMapping("/process_register")
+ public String processRegister(UsersEntity user) {
+ BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+ String encodedPassword = passwordEncoder.encode(user.getPassword());
+ user.setPassword(encodedPassword);
+ iUsers.save(user);
+ return "index";
+ }
}
diff --git a/src/main/java/com/cristobalbernal/foro/seguridad/ConfigSeguridad.java b/src/main/java/com/cristobalbernal/foro/seguridad/ConfigSeguridad.java
deleted file mode 100644
index 4d9ccaa..0000000
--- a/src/main/java/com/cristobalbernal/foro/seguridad/ConfigSeguridad.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.cristobalbernal.foro.seguridad;
-
-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.config.annotation.web.configurers.LogoutConfigurer;
-import org.springframework.security.core.userdetails.User;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.provisioning.InMemoryUserDetailsManager;
-import org.springframework.security.web.SecurityFilterChain;
-
-@Configuration
-@EnableWebSecurity
-public class ConfigSeguridad {
- @Bean
- public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
- http
- .authorizeHttpRequests((requests) -> requests
- .requestMatchers("","/home","/","/registrar","/css/**","/image/**","/fonts/**","js/**","/postdetall/{id}").permitAll()
- .anyRequest().authenticated()
- )
- .formLogin((form) -> form
- .loginPage("/login")
- .permitAll()
- )
- .logout(LogoutConfigurer::permitAll);
-
- return http.build();
- }
-
- @Bean
- public UserDetailsService userDetailsService() {
- UserDetails user =
- User.withDefaultPasswordEncoder()
- .username("tobal")
- .password("1234")
- .roles("USER")
- .build();
-
- return new InMemoryUserDetailsManager(user);
- }
-}
diff --git a/src/main/java/com/cristobalbernal/foro/seguridad/MvcConfig.java b/src/main/java/com/cristobalbernal/foro/seguridad/McvConfig.java
similarity index 52%
rename from src/main/java/com/cristobalbernal/foro/seguridad/MvcConfig.java
rename to src/main/java/com/cristobalbernal/foro/seguridad/McvConfig.java
index 268a3a5..072941d 100644
--- a/src/main/java/com/cristobalbernal/foro/seguridad/MvcConfig.java
+++ b/src/main/java/com/cristobalbernal/foro/seguridad/McvConfig.java
@@ -5,12 +5,14 @@ import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
-public class MvcConfig implements WebMvcConfigurer {
- @Override
- public void addViewControllers(ViewControllerRegistry registration){
- registration.addViewController("/").setViewName("inicio");
- registration.addViewController("/crearPregunta").setViewName("crearPregunta");
- registration.addViewController("/login").setViewName("login");
+public class McvConfig implements WebMvcConfigurer {
+ public void addViewControllers(ViewControllerRegistry registry) {
+ registry.addViewController("/").setViewName("index");
+ registry.addViewController("").setViewName("index");
+ registry.addViewController("/index").setViewName("index");
+ registry.addViewController("/login").setViewName("login");
}
+
}
+
diff --git a/src/main/java/com/cristobalbernal/foro/seguridad/SegurityConfig.java b/src/main/java/com/cristobalbernal/foro/seguridad/SegurityConfig.java
new file mode 100644
index 0000000..0e652b3
--- /dev/null
+++ b/src/main/java/com/cristobalbernal/foro/seguridad/SegurityConfig.java
@@ -0,0 +1,59 @@
+package com.cristobalbernal.foro.seguridad;
+
+import com.cristobalbernal.foro.seguridad.models.CustomUserDetailService;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configurers.LogoutConfigurer;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.SecurityFilterChain;
+
+
+@Configuration
+@EnableWebSecurity
+public class SegurityConfig {
+ @Bean
+ public CustomUserDetailService userDetailsService(){
+ return new CustomUserDetailService();
+ }
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return new BCryptPasswordEncoder();
+ }
+
+ @Bean
+ public DaoAuthenticationProvider authenticationProvider() {
+ DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
+
+ authProvider.setUserDetailsService(userDetailsService());
+ authProvider.setPasswordEncoder(passwordEncoder());
+
+ return authProvider;
+ }
+
+
+ @Bean
+ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
+ http
+ .authorizeHttpRequests()
+ .requestMatchers("/crearPregunta","/miperfil").authenticated()
+ .anyRequest().permitAll()
+ .and()
+ .formLogin()
+ .usernameParameter("email")
+ .loginPage("/login")
+ .defaultSuccessUrl("/home")
+ .permitAll()
+ .and()
+ .logout(LogoutConfigurer::permitAll);
+
+ return http.build();
+ }
+
+
+
+
+}
diff --git a/src/main/java/com/cristobalbernal/foro/seguridad/models/CustomUserDetailService.java b/src/main/java/com/cristobalbernal/foro/seguridad/models/CustomUserDetailService.java
new file mode 100644
index 0000000..b79a036
--- /dev/null
+++ b/src/main/java/com/cristobalbernal/foro/seguridad/models/CustomUserDetailService.java
@@ -0,0 +1,23 @@
+package com.cristobalbernal.foro.seguridad.models;
+
+import com.cristobalbernal.foro.Entidades.UsersEntity;
+import com.cristobalbernal.foro.Respositorios.IUsers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+
+import java.util.ArrayList;
+
+public class CustomUserDetailService implements UserDetailsService {
+
+ @Autowired
+ private IUsers iUsers;
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ UsersEntity users = iUsers.findByEmail(username);
+ return new CustomUserDetails(users);
+ }
+
+}
diff --git a/src/main/java/com/cristobalbernal/foro/seguridad/models/CustomUserDetails.java b/src/main/java/com/cristobalbernal/foro/seguridad/models/CustomUserDetails.java
new file mode 100644
index 0000000..daf91e5
--- /dev/null
+++ b/src/main/java/com/cristobalbernal/foro/seguridad/models/CustomUserDetails.java
@@ -0,0 +1,53 @@
+package com.cristobalbernal.foro.seguridad.models;
+
+import com.cristobalbernal.foro.Entidades.UsersEntity;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.Collection;
+
+public class CustomUserDetails implements UserDetails {
+
+
+ private final UsersEntity user;
+
+ public CustomUserDetails(UsersEntity user) {
+ this.user = user;
+ }
+
+ @Override
+ public Collection extends GrantedAuthority> getAuthorities() {
+ return null;
+ }
+
+ @Override
+ public String getPassword() {
+ return user.getPassword();
+ }
+
+ @Override
+ public String getUsername() {
+ return user.getEmail();
+ }
+
+ @Override
+ public boolean isAccountNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isAccountNonLocked() {
+ return true;
+ }
+
+ @Override
+ public boolean isCredentialsNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 5cdfb66..6396b04 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -6,4 +6,5 @@ spring.datasource.url=jdbc:mariadb://localhost:3306/forogruas
spring.datasource.username=root
spring.datasource.password=
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
-spring.data.jpa.repositories.enabled=true
\ No newline at end of file
+spring.data.jpa.repositories.enabled=true
+spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
\ No newline at end of file
diff --git a/src/main/resources/templates/login/login.html b/src/main/resources/templates/login/login.html
index f003375..ae6e91f 100644
--- a/src/main/resources/templates/login/login.html
+++ b/src/main/resources/templates/login/login.html
@@ -25,11 +25,11 @@
Log In
Hello there, Log In