Untitled
Anonymous
plain_text
02/16/2026 3:46 PM
3.9 KB
13
Indexable
package com.sigito.backend.util;
import com.sigito.backend.entity.Utilisateur;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
@Component
@Data
public class JwtUtil {
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expiration}")
private long expiration;
// ===== GENERATE TOKEN =====
public String generateToken(Utilisateur user) {
Map<String, Object> claims = new HashMap<>();
// ⭐ Custom Claims
claims.put("userId", user.getId());
claims.put("role", user.getRole().name());
return createToken(claims, user.getUsername());
}
// ===== CREATE TOKEN =====
private String createToken(Map<String, Object> claims, String subject) {
return Jwts.builder()
.claims(claims)
.subject(subject)
.issuedAt(new Date(System.currentTimeMillis()))
.expiration(new Date(System.currentTimeMillis() + expiration))
.signWith(getSigningKey())
.compact();
}
// ===== EXTRACT CLAIMS =====
public String extractUsername(String token) {
return extractClaim(token, Claims::getSubject);
}
public Long extractUserId(String token) {
return extractAllClaims(token).get("userId", Long.class);
}
public String extractRole(String token) {
return extractAllClaims(token).get("role", String.class);
}
public Date extractExpiration(String token) {
return extractClaim(token, Claims::getExpiration);
}
// ===== VALIDATION =====
public Boolean isTokenExpired(String token) {
return extractExpiration(token).before(new Date());
}
public Boolean validateToken(String token, String username) {
final String extractedUsername = extractUsername(token);
return extractedUsername.equals(username) && !isTokenExpired(token);
}
// ===== GENERIC CLAIM EXTRACTION =====
private <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
final Claims claims = extractAllClaims(token);
return claimsResolver.apply(claims);
}
private Claims extractAllClaims(String token) {
return Jwts.parser()
.verifyWith(getSigningKey())
.build()
.parseSignedClaims(token)
.getPayload();
}
private SecretKey getSigningKey() {
byte[] keyBytes = secret.getBytes(StandardCharsets.UTF_8);
return Keys.hmacShaKeyFor(keyBytes);
}
}
Editor is loading...
Leave a Comment