package com.example.accessingdatamysql.auth; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.DatatypeConverter; import java.security.Key; import io.jsonwebtoken.*; import java.util.Date; import org.springframework.stereotype.Component; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Claims; /* A simple static class that is used to create and decode JWTs. */ public class JWT{ // The secret key. This should be in a property file NOT under source // control and not hard coded in real life. We're putting it here for // simplicity. private static String SECRET_KEY = "secret dev key"; private static final long DEFAULT_TTL = 99999; //Sample method to construct a JWT public static String createJWT(String id, String issuer, String subject, long ttlMillis) { //The JWT signature algorithm we will be using to sign the token SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; long nowMillis = System.currentTimeMillis(); Date now = new Date(nowMillis); //We will sign our JWT with our ApiKey secret byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET_KEY); Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName()); //Let's set the JWT Claims JwtBuilder builder = Jwts.builder().setId(id) .setIssuedAt(now) .setSubject(subject) .setIssuer(issuer) .signWith(signatureAlgorithm, signingKey); //if it has been specified, let's add the expiration if (ttlMillis >= 0) { long expMillis = nowMillis + ttlMillis + DEFAULT_TTL; // pad with default amount Date exp = new Date(expMillis); builder.setExpiration(exp); } //Builds the JWT and serializes it to a compact, URL-safe string return builder.compact(); } public static Claims decodeJWT(String jwt) { //This line will throw an exception if it is not a signed JWS (as expected) try { Claims claims = Jwts.parser() .setSigningKey(DatatypeConverter.parseBase64Binary(SECRET_KEY)) .parseClaimsJws(jwt).getBody(); return claims; } catch (Exception e) { return null; } } }