You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-spms-java/src/main/java/com/glxp/api/util/JwtUtils.java

108 lines
3.1 KiB
Java

2 years ago
package com.glxp.api.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;
import java.util.Date;
import java.util.Map;
/**
* jwt
*/
public class JwtUtils {
/**
* token
*
* @param claims map
* @param ttl
* @return
*/
public static String createToken(Map<String,Object> claims, Long ttl) {
Key key = generateKey();
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
Long nowMillis = System.currentTimeMillis(); //生成JWT的时间
JwtBuilder builder = Jwts.builder()
.setHeaderParam("typ", "JWT") //设置header
.setHeaderParam("alg", "HS256")
.setClaims(claims) //设置payload的键值对
// .setIssuedAt(now) //设置iat
// .setIssuer("vue-api")
.signWith(signatureAlgorithm, key); //签名需要算法和key
if (ttl != null && ttl >= 0) {
Long expMillis = nowMillis + ttl * 1000;
Date exp = new Date(expMillis);
builder.setExpiration(exp); //设置过期时间
}
String token = builder.compact();
return token;
}
public static String createJWT(String id, long ttlMillis) {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
SecretKey secretKey = generateKey();
JwtBuilder builder = Jwts.builder().setId(id) // 主题
.setIssuer("user") // 签发者
.setIssuedAt(now) // 签发时间
.signWith(signatureAlgorithm, secretKey); // 签名算法以及密匙
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date expDate = new Date(expMillis);
builder.setExpiration(expDate); // 过期时间
}
return builder.compact();
}
/**
* token
*
* @param claims map
* @return
*/
public static String createToken(Map<String,Object> claims) {
return createToken(claims, null);
}
/**
* jwt
* @param jwt jwt
* @return
*/
public static Claims parse(String jwt) {
if (jwt == null) {
return null;
}
try {
return Jwts.parser()
.setSigningKey(generateKey()) //此处的key要与之前创建的key一致
.parseClaimsJws(jwt)
.getBody();
}catch (Exception e){
return null;
}
}
/**
* key
*
* @return
*/
private static SecretKey generateKey() {
String stringKey = "udicapi";
byte[] encodedKey = Base64.getDecoder().decode(stringKey);
return new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
}
}