Commit 84451dc5 by Rubén Ramírez

feat: [JWT]: Implementada la encriptación de la clave

parent 6f45a714
......@@ -68,6 +68,34 @@
<version>2.2.224</version>
<scope>test</scope>
</dependency>
<!-- Para encriptar contraseñas con BCrypt -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Para manejar JSON Web Tokens (JWT) -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
......
package com.ujaen.tfg.mangaffinity.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
\ No newline at end of file
......@@ -26,6 +26,7 @@ public class Usuario {
@Column(unique = true, nullable = false)
private String nombreUsuario;
@Setter
@NotBlank
@Column(nullable = false)
private String contrasenia;
......
package com.ujaen.tfg.mangaffinity.seguridad;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class JwtUtil {
private final String SECRET_KEY = "clave_secreta"; // Cámbiala por algo más seguro
public String generarToken(String email) {
return Jwts.builder()
.setSubject(email)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 10 horas
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
public String extraerEmail(String token) {
return getClaims(token).getSubject();
}
public boolean validarToken(String token, String email) {
return (email.equals(extraerEmail(token)) && !estaExpirado(token));
}
private boolean estaExpirado(String token) {
return getClaims(token).getExpiration().before(new Date());
}
private Claims getClaims(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
}
}
......@@ -5,17 +5,22 @@ import com.ujaen.tfg.mangaffinity.repositorios.RepositorioUsuario;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Service
public class ServicioUsuarios {
@Autowired
RepositorioUsuario repositorioUsuario;
private final PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
/**
* Función para crear un Socio en la estructura
* @param usuario usuario que se va a añadir
*/
public void crearUsuario(@Valid Usuario usuario) {
usuario.setContrasenia(passwordEncoder.encode(usuario.getContrasenia()));
repositorioUsuario.guardar(usuario);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment