在0.9.x版本下的许多方法都被弃用:
查看废弃的方法的源码,可以找到最新的使用方法,生成令牌的方式并不唯一:
最新的JWT令牌生成和校验:
依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.6</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.12.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-gson</artifactId>
<version>0.12.6</version>
</dependency>
JWT令牌生成:
/**
* 过期时间,7天
*/
private static final long EXPIRE = 60000 * 60 * 24 * 7;
/**
* 加密密钥
*/
private static final String SECRET = "net.example.SSMdemo";
/**
* 使用HS256算法生成密钥
*/
private static final SecretKey KEY = Jwts.SIG.HS256.key().random(new SecureRandom(SECRET.getBytes())).build();
/**
* 主题
*/
private static final String SUBJECT = "SSMdemo";
/**
* 根据用户信息生成令牌
* @param user
* @return
*/
public static String geneJsonWebToken(User user){
Map<String,Object> claims = new HashMap<>();
claims.put("name",user.getName());
claims.put("phone",user.getPhone());
String token = Jwts.builder().claims()
.add(claims) // 添加内容
.subject(SUBJECT) // 声明主题
.issuedAt(new Date()) // 创建JWT时的时间戳
.expiration(new Date(System.currentTimeMillis() + EXPIRE)) // 设置过期时间
.and() // 返回JwtBuilder配置
.signWith(KEY) // 签名
.compact(); // 紧凑
return token;
}
校验JWT令牌:
public static Claims checkJWT(String token){
try {
final Claims claims = Jwts.parser()
.verifyWith(KEY) // 验证所有遇到的JWS签名
.build()
.parse(token).accept(Jws.CLAIMS) // 解析jws
.getPayload(); // JWT有效载荷
return claims;
}catch (Exception e){
return null;
}
}
在https://jwt.io/直接校验jwt令牌: