25 Kasım 2020 Çarşamba

JwtTokenUtil Sınıfı

Giriş
Şu satırı dahil ederiz
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
Bu sınıfta JWT ile çalışmayı kolaylaştıran bazı metodlar var

Extract Metodları
Şöyle yaparız
public String extractUsername(String token) {
  return extractClaim(token, Claims::getSubject);
}

public Date extractExpiration(String token) {
  return extractClaim(token, Claims::getExpiration);
}
Her extract işlemi için şu ortak metodlar kullanılıyor
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().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();
}
Burada görüldüğü gibi JWT'ye erişmek için kullanılan bir SECRET_KEY değeri var. Bu değeri bir yerde tanımlamak lazım. Yani sınıf içinde şöyle bir alan var
private String SECRET_KEY = "secret";
Token Kontrolleri
Örnek
Şöyle yaparız
public Claims getAllClaimsFromToken(String token) {
  return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
}

private boolean isTokenExpired(String token) {
  return this.getAllClaimsFromToken(token).getExpiration().before(new Date());
}

public boolean isInvalid(String token) {
  return this.isTokenExpired(token);
}
Token Üretmek
Şöyle yaparız. Bu kod aslında biraz eksik ve kötü. Birincisi kullanıcıya ait boş claim yaratıyor. İkincisi eski java Date sınıfını kullanıyor
public String generateToken(String subject) {
   Map<String, Object> claims = new HashMap<>();
   return createToken(claims, subject);
}

private String createToken(Map<String, Object> claims, String subject) {
  return Jwts.builder()
    .setClaims(claims)
    .setSubject(subject)
    .setIssuedAt(new Date(System.currentTimeMillis()))
    .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10))
    .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
    .compact();
}

Hiç yorum yok:

Yorum Gönder