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("中國")); }