JwtUtil.java
package com.oc_p9.gateway_service.util;
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.security.Key;
import java.util.Date;
/**
* Classe pour gérer les opérations liées au JWT.
* Elle permet de créer, valider et lire les informations d'un token.
*/
@Component
public class JwtUtil {
private final Key secretKey;
private final long jwtExpirationMs = 3600000; // Durée de validité du token en millisecondes (1h)
/**
* Initialise la clé secrète utilisée pour signer les tokens.
*
* @param secret la clé secrète définie dans le fichier de configuration
*/
public JwtUtil(@Value("${jwt.secret}") String secret) {
this.secretKey = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8));
}
/**
* Génère un token JWT pour un utilisateur.
*
* @param username le nom de l'utilisateur
* @return un token signé avec une date de création et une date d’expiration
*/
public String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date()) // date de création du token
.setExpiration(new Date(System.currentTimeMillis() + jwtExpirationMs)) // expiration dans 1h
.signWith(secretKey, SignatureAlgorithm.HS256) // algorithme de signature
.compact();
}
/**
* Vérifie si un token est valide.
*
* @param token le token à vérifier
* @return vrai si le token est bien formé et non expiré, sinon faux
*/
public boolean validateToken(String token) {
try {
Jwts.parserBuilder().setSigningKey(secretKey).build().parseClaimsJws(token);
return true;
} catch (JwtException e) {
return false;
}
}
/**
* Extrait le nom d’utilisateur contenu dans le token.
*
* @param token le token JWT
* @return le nom de l’utilisateur (username)
*/
public String getUsernameFromToken(String token) {
return Jwts.parserBuilder().setSigningKey(secretKey).build()
.parseClaimsJws(token).getBody().getSubject();
}
}