认清现实,放弃幻想,准备斗争
一、创建Maven项目
1、项目
项目类型:Maven
groupId:com.atguigu
artifactId:jwt
2、基本依赖
<dependencies> <!-- JWT --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
二、测试JWT
1、生成token
public class JwtTests { //过期时间,毫秒,24小时 private static long tokenExpiration = 24*60*60*1000; //秘钥 private static String tokenSignKey = "atguigu123"; @Test public void testCreateToken(){ String token = Jwts.builder() .setHeaderParam("typ", "JWT") //令牌类型 .setHeaderParam("alg", "HS256") //签名算法 .setSubject("guli-user") //令牌主题 .setIssuer("atguigu")//签发者 .setAudience("atguigu")//接收者 .setIssuedAt(new Date())//签发时间 .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) //过期时间 .setNotBefore(new Date(System.currentTimeMillis() + 20*1000)) //20秒后可用 .setId(UUID.randomUUID().toString()) .claim("nickname", "Helen") .claim("avatar", "1.jpg") .signWith(SignatureAlgorithm.HS256, tokenSignKey)//签名哈希 .compact(); //转换成字符串 System.out.println(token); } }
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWxpLXVzZXIiLCJpc3MiOiJhdGd1aWd1IiwiYXVkIjoiYXRndWlndSIsImlhdCI6MTY2MjYzNTc0NiwiZXhwIjoxNjYyNzIyMTQ2LCJuYmYiOjE2NjI2MzU3NjYsImp0aSI6ImQ0OGE2MTY3LWNiNzMtNGQyMi1hMjg2LTJjNDU2YWYyOTY5MiIsIm5pY2tuYW1lIjoiSGVsZW4iLCJhdmF0YXIiOiIxLmpwZyJ9.KR9MIgf0Hykpa78GyxcEAcZHe8R_onDGpr7c3Ns3Mg8
2、解析token
@Test public void testGetUserInfo(){ String token = Jwts.builder() .setHeaderParam("typ", "JWT") //令牌类型 .setHeaderParam("alg", "HS256") //签名算法 .setSubject("guli-user") //令牌主题 .setIssuer("atguigu")//签发者 .setAudience("atguigu")//接收者 .setIssuedAt(new Date())//签发时间 .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) //过期时间 .setNotBefore(new Date(System.currentTimeMillis())) //20秒后可用 .setId(UUID.randomUUID().toString()) .claim("nickname", "Helen") .claim("avatar", "1.jpg") .signWith(SignatureAlgorithm.HS256, tockenSigKey)//签名哈希 .compact(); //转换成字符串 System.out.println(token); JwtParser parser = Jwts.parser(); Jws<Claims> claimsJws = parser.setSigningKey(tockenSigKey).parseClaimsJws(token); Claims body = claimsJws.getBody(); String subject = body.getSubject(); Date issuedAt = body.getIssuedAt(); Date notBefore = body.getNotBefore(); String signature = claimsJws.getSignature(); System.out.println(subject); System.out.println(notBefore); System.out.println(issuedAt); System.out.println(signature); }
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWxpLXVzZXIiLCJpc3MiOiJhdGd1aWd1IiwiYXVkIjoiYXRndWlndSIsImlhdCI6MTY2MjYzNTg4NywiZXhwIjoxNjYyNzIyMjg3LCJuYmYiOjE2NjI2MzU4ODcsImp0aSI6IjA0ZTBiZDk3LTFkOWItNGY5MS04M2RkLWEyMGI1OWI4Yjk1NiIsIm5pY2tuYW1lIjoiSGVsZW4iLCJhdmF0YXIiOiIxLmpwZyJ9.LPFZG5d5Y2YQuFjEKJQdrjrl_i9m5YsXECyK2qd232w guli-user Thu Sep 08 19:18:07 CST 2022 Thu Sep 08 19:18:07 CST 2022 LPFZG5d5Y2YQuFjEKJQdrjrl_i9m5YsXECyK2qd232w