河南省汝州市建设网站专业软文平台
在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令牌: