在这篇文章中主要记录一下在Java中如何使用 java 代码生成jwt token,主要是使用jjwt来生成和验证jwt,关于什么是JWT,以及JWT可以干什么不做详解。
jwt的格式: base64(header).base64(payload).加密算法(base64(header)+“.”+base64(payload),"私钥")
在Java中使用JWT
一、引入jjwt的jar包
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency>
二、生成JWT token
// 私钥 private static final String SECRET_KEY = "this is a secret key"; public static void main(String[] args) { // 生成token String jwtToken = Jwts.builder() // 头部 .setHeaderParam("typ", "JWT") // jwt 标注中的申明 .setIssuedAt(new Date()) // 签发时间 .setExpiration(new Date(new Date().getTime() + 10000L))// 过期时间 .setSubject("19930311")// jwt面向的客户 .setIssuer("huan")// jwt的签发者 // 公共申明和私有申明 .claim("user_id", "admin") .claim("phone", "18251421000") .claim("age", 25) .claim("sex", "男") // 签证 .signWith(SignatureAlgorithm.HS256, SECRET_KEY.getBytes()) .compact(); System.out.println("生成的 jwt token 如下:" + jwtToken); }
三、验证jwt token
// 验证jwt Jws<Claims> claimsJws = Jwts.parser() // 验证签发者字段iss 必须是 huan .require("iss", "huan") // 设置私钥 .setSigningKey(SECRET_KEY.getBytes()) // 解析jwt字符串 .parseClaimsJws(jwtToken); // 获取头部信息 JwsHeader header = claimsJws.getHeader(); // 获取载荷信息 Claims payload = claimsJws.getBody(); System.out.println("解析过来的jwt的header如下:" + header.toString()); System.out.println("解析过来的jwt的payload如下:" + payload.toString());
上面jwtToken的值为第二步生成的jwt token的值
注:1、.require("iss","haun") 表示jwt中的iss字段的值必须是huan
2、验证jwt的秘钥和生成jwt的秘钥必须是同一个。
四、结果