JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。
JJWT的目标是最容易使用和理解用于在JVM上创建和验证JSON Web令牌(JWTs)的库。
JJWT是基于JWT、JWS、JWE、JWK和JWA RFC规范的Java实现。
JJWT还添加了一些不属于规范的便利扩展,比如JWT压缩和索赔强制。
JJWT用法
添加依赖
<!--jjwt 生成token--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
/** * 生成Token */ @Test public void testJWTBuilder(){ long now = System.currentTimeMillis(); long exp = now + 60 * 1000; JwtBuilder jwtBuilder= Jwts.builder() //设置id,{"jti":""} .setId("9527") //{"sub":""} .setSubject("JJWT") //{"iat":""} .setIssuedAt(new Date()) .signWith(SignatureAlgorithm.HS256,"xxxxx") //过期时间,指定从现在开始到什么时候过期,{"exp":""} .setExpiration(new Date(exp)) //自定义声明,参数map //.addClaims() .claim("name","xiaoqiang") .claim("中国","加油"); //生成token String token = jwtBuilder.compact(); System.out.println(token); String[] split=token.split("\\."); System.out.println(Base64Codec.BASE64.decodeToString(split[0])); System.out.println(Base64Codec.BASE64.decodeToString(split[1])); System.out.println(Base64Codec.BASE64.decodeToString(split[2])); } /** * Token解析 */ @Test public void testJWTToken(){ String token = "eyJhbGciOiJIUzI1NiJ9." + "eyJqdGkiOiI5NTI3Iiwic3ViIjoiSkpXVCIsImlhdCI6MTYyOTQ0MTE2OSwiZXhwIjoxNjI5NDQxMjI5LCJuYW1lIjoieGlhb3FpYW5nIiwi5Lit5Zu9Ijoi5Yqg5rK5In0" + ".ztKcVF5r5hwQ7X4qwhH-NvWmdWELXImxIDRWiaCSzq8"; Claims claims = Jwts.parser().setSigningKey("xxxxx") .parseClaimsJws(token).getBody(); System.out.println("jti:"+claims.getId()); System.out.println("sub:"+claims.getSubject()); System.out.println("iat:"+claims.getIssuedAt()); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("iat:"+format.format(claims.getIssuedAt())); System.out.println("exp:"+format.format(claims.getExpiration())); System.out.println("name:"+claims.get("name")); System.out.println("中国:"+claims.get("中国")); }