//依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
public class TokenUtil {
/**
* 设置Token签名密钥
*/
private static final String SECRET_KEY = "20191224610326001";
/**
* 签发地:该JWT的签发者
*/
private static final String issuer = "www.baidu.com";
/**
* 设置过期时间 毫秒
*/
private static final long validity = 30 * 1000 * 60;
/**
* 生成Token
*
* @param account 账户
* @param password 密码
* @param groupId 组织机构ID
* @param enterprise 企业账户
* @return 返回Token
*/
public static String createJwtToken(String account, String password, Long groupId, String enterprise) {
//签名算法
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
//生成签发时间,直接获取系统毫秒数
long nowTime = System.currentTimeMillis();
Date nowDate = new Date(nowTime);
//通过密钥签名JWT
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET_KEY);
String string = signatureAlgorithm.getJcaName();
Key signingkey = new SecretKeySpec(apiKeySecretBytes, string);
//设置JWT声明
JwtBuilder jwtBuilder = Jwts.builder()
.setId(account)
.claim("password", password)
.claim("groupId", groupId)
.claim("enterprise", enterprise)
.setIssuedAt(nowDate)
.setIssuer(issuer)
.signWith(signatureAlgorithm, signingkey);
//过期时间
long expMillis = nowTime + validity;
Date exp = new Date(expMillis);
jwtBuilder.setExpiration(exp);
//构建JWT并将其序列化为一个紧凑的url安全字符串
return jwtBuilder.compact();
}
/**
* Token解析方法
*/
public static Claims parseJWT(String jwt) {
return Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(SECRET_KEY)).parseClaimsJws(jwt).getBody();
}
}
@Test
public void testToken() {
//生成Token
String token = TokenUtil.createJwtToken("admin", "admin", 103422610L, "测试");
System.err.println(token);
//解析Token
Claims claims = TokenUtil.parseJWT(token);
System.err.println(claims.get("groupId"));
System.err.println(claims);
}