Commit 26d5dd22 by Rubén Ramírez

fix: [*]: Corregido problema con la contraseña volatil

parent 44b36fff
......@@ -26,35 +26,28 @@ public class JwtFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
String token = request.getHeader("Authorization");
if (token == null || !token.startsWith("Bearer ")) {
chain.doFilter(request, response); // Continúa sin forzar autenticación
chain.doFilter(request, response); // Permitir acceso a rutas públicas
return;
}
token = token.substring(7); // Removemos "Bearer "
token = token.substring(7);
try {
Claims claims = jwtUtil.decodeJWT(token);
request.setAttribute("claims", claims);
// Crear objeto de autenticación en Spring Security
User userDetails = new User(claims.getSubject(), "", Collections.emptyList());
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
// Establecer autenticación en el contexto de seguridad
SecurityContextHolder.getContext().setAuthentication(authentication);
} catch (TokenExpirado e) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write("El token ha expirado.");
return;
} catch (TokenInvalido e) {
} catch (TokenExpirado | TokenInvalido e) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().write("Token inválido.");
response.getWriter().write("Token inválido o expirado.");
return;
}
......
......@@ -4,7 +4,11 @@ import com.ujaen.tfg.mangaffinity.excepciones.TokenExpirado;
import com.ujaen.tfg.mangaffinity.excepciones.TokenInvalido;
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;
import javax.crypto.SecretKey;
......@@ -13,7 +17,12 @@ import javax.crypto.SecretKey;
public class JwtUtil {
private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
private final SecretKey secretKey;
public JwtUtil(@Value("${jwt.secret}") String secret) {
this.secretKey = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8));
}
private static final long EXPIRATION_TIME = 86400000; // 1 día en milisegundos
......@@ -24,7 +33,7 @@ public class JwtUtil {
.setSubject(subject)
.setIssuedAt(new Date()) // Fecha de emisión
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // Expiración del token
.signWith(SECRET_KEY) // Firmar el token con la misma clave
.signWith(secretKey) // Firmar el token con la misma clave
.compact();
}
......@@ -32,7 +41,7 @@ public class JwtUtil {
public Claims decodeJWT(String token) {
try {
return Jwts.parserBuilder()
.setSigningKey(SECRET_KEY)
.setSigningKey(secretKey)
.build()
.parseClaimsJws(token)
.getBody();
......@@ -71,7 +80,7 @@ public class JwtUtil {
private Claims extractAllClaims(String token) {
return Jwts.parserBuilder()
.setSigningKey(SECRET_KEY) // Usamos la misma clave para extraer los claims
.setSigningKey(secretKey) // Usamos la misma clave para extraer los claims
.build()
.parseClaimsJws(token)
.getBody();
......
......@@ -76,7 +76,8 @@ public class ServicioUsuarios {
// Generamos el token JWT
String token = jwtUtil.generateToken(claims, usuario.get().getEmail());
return new DTOLoginRespuesta(token, usuario.get().getEmail(), usuario.get().getContrasenia());
return new DTOLoginRespuesta(token, usuario.get().getEmail(), usuario.get().getNombreUsuario());
}
......
spring.application.name=MangAfginity
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
jwt.secret=V9++ZyZHKcKKzVvAWKU5EL8/QDTDVOf/LTv+r8dUbQg=
\ No newline at end of file
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