Ş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
Her extract işlemi için şu ortak metodlar kullanılıyorpublic String extractUsername(String token) {return extractClaim(token, Claims::getSubject);}public Date extractExpiration(String token) {return extractClaim(token, Claims::getExpiration);}
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);}
Şö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