添加依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.6.0</version>
</dependency>
工具类
public class JwtUtil {
//盐值
private static String key = "秘钥";
private static long ttl = Constants.TimeValue.HOUR_2;//2个小时
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public long getTtl() {
return ttl;
}
public void setTtl(long ttl) {
this.ttl = ttl;
}
/**
* @param claims 载荷内容
* @param ttl 有效时长
* @return
*/
public static String createToken(Map<String, Object> claims, long ttl) {
JwtUtil.ttl = ttl;
return createToken(claims);
}
public static String createRefreshToken(String userId, long ttl) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
JwtBuilder builder = Jwts.builder().setId(userId)
.setIssuedAt(now)
.signWith(SignatureAlgorithm.HS256, key);
if (ttl > 0) {
builder.setExpiration(new Date(nowMillis + ttl));
}
return builder.compact();
}
/**
* @param claims 载荷
* @return token
*/
public static String createToken(Map<String, Object> claims) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
JwtBuilder builder = Jwts.builder()
.setIssuedAt(now)
.signWith(SignatureAlgorithm.HS256, key);
if (claims != null) {
builder.setClaims(claims);
}
if (ttl > 0) {
builder.setExpiration(new Date(nowMillis + ttl));
}
return builder.compact();
}
public static Claims parseJWT(String jwtStr) {
return Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(jwtStr)
.getBody();
}
}
生成token
public class TestCreateToken {
public static void main(String[] args) {
Map<String, Object> claims = new HashMap<>();
claims.put("id", "722250648279580673");
claims.put("userName", "测试用户");
claims.put("role", "role_normal");
claims.put("avatar", "https://cdn.sunofbeaches.com/images/default_avatar.png");
claims.put("email", "test@sunofbeach.net");
String token = JwtUtil.createToken(
claims);//有效期为1分钟
System.out.println(token);
}
}
解析Token
public class TestParesToken {
public static void main(String[] args) {
Claims claims = JwtUtil.parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoicm9sZV9ub3JtYWwiLCJpZCI6IjcyMjI1MDY0ODI3OTU4MDY3MyIsImF2YXRhciI6Imh0dHBzOi8vY2RuLnN1bm9mYmVhY2hlcy5jb20vaW1hZ2VzL2RlZmF1bHRfYXZhdGFyLnBuZyIsInVzZXJOYW1lIjoi5rWL6K-V55So5oi3IiwiZXhwIjoxNTkyNDk3NzM5LCJlbWFpbCI6InRlc3RAc3Vub2ZiZWFjaC5uZXQifQ.OHAMya4equKtfWqutVQyKo--b47sexg086iWgtqxG2M");
//==============================================//
Object id = claims.get("id");
Object name = claims.get("userName");
Object role = claims.get("role");
Object avatar = claims.get("avatar");
Object email = claims.get("email");
System.out.println("id == > " + id);
System.out.println("name == > " + name);
System.out.println("role == > " + role);
System.out.println("avatar == > " + avatar);
System.out.println("email == > " + email);
}
}