package com.hzrc.acl.authentication.security.util;
import java.security.Key;
import java.util.Date;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import org.springframework.util.Base64Utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
public class JwtUtil {
/**
* 生成jwt token字符串
*
* @param id 业务id,可以是用户id,或token id,根据需要自定义
* @param subject json格式用户信息,会写入token
* @param ttlMillis 过期时间
* @param secretkey 密钥
*/
public static String createJWT(String id, String subject, long ttlMillis,String secretkey) {
// 签名方法 HS256
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
// 生成秘钥
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(secretkey);
Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
//Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
// 生成Jwt的时间
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
// 设置JWT所存储的信息
JwtBuilder builder = Jwts.builder().setId(id).setIssuedAt(now).setSubject(subject).signWith(signingKey);
//builder.claim("name", "value"); //存储自定义信息
// 设置过期时间
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
// builder.claim("aa","bb");定制参数
// 构建JWT并将其序列化为紧凑的URL安全字符串
return builder.compact();
}
/**
* 解析Jwt字符串
*
* @param jwt token字符串
* @param secretkey 密钥
* @return Claims 解析后的对象
*/
public static Claims parseJWT(String jwt,String secretkey) {
return Jwts.parserBuilder().setSigningKey(DatatypeConverter.parseBase64Binary(secretkey)).build().parseClaimsJws(jwt).getBody();
}
}
海报
0 条评论
158
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~