Skip to content
Snippets Groups Projects
JWT.java 2.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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;
            }
       }
    
    }