All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wf.jwtp.util.TokenUtil Maven / Gradle / Ivy

The newest version!
package org.wf.jwtp.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import org.wf.jwtp.provider.Token;

import javax.crypto.SecretKey;
import java.security.Key;
import java.util.Date;

/**
 * Token工具类
 *
 * @author wangfan
 */
public class TokenUtil {
    public static final long DEFAULT_EXPIRE = 60 * 60 * 24;  // 默认过期时长,单位秒

    /**
     * 生成token
     */
    public static Token buildToken(String subject) {
        return buildToken(subject, DEFAULT_EXPIRE);
    }

    public static Token buildToken(String subject, long expire) {
        return buildToken(subject, expire, getKey());
    }

    public static Token buildToken(String subject, long expire, Key key) {
        Date expireDate = new Date(new Date().getTime() + 1000 * expire);  // 单位毫秒
        String access_token = Jwts.builder().setSubject(subject).signWith(key).setExpiration(expireDate).compact();
        Token token = new Token();
        // token.setTokenKey(Hex.encodeToString(key.getEncoded()));
        token.setAccessToken(access_token);
        token.setUserId(subject);
        token.setExpireTime(expireDate);
        return token;
    }

    /**
     * 解析token
     */
    public static String parseToken(String token, String hexKey) {
        Jws claimsJws = Jwts.parser().setSigningKey(parseHexKey(hexKey)).parseClaimsJws(token);
        return claimsJws.getBody().getSubject();
    }

    /**
     * 生成Key
     */
    public static Key getKey() {
        return Keys.secretKeyFor(SignatureAlgorithm.HS256);
    }

    /**
     * 生成16进制的key
     */
    public static String getHexKey() {
        return getHexKey(getKey());
    }

    public static String getHexKey(Key key) {
        return Hex.encodeToString(key.getEncoded());
    }

    /**
     * 把16进制的key转成Key
     */
    public static Key parseHexKey(String hexKey) {
        if (hexKey == null || hexKey.trim().isEmpty()) {
            return null;
        }
        SecretKey key = Keys.hmacShaKeyFor(Hex.decode(hexKey));
        return key;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy