JJWT
JJWT是一個(gè)提供端到端的JWT創(chuàng)建和驗(yàn)證的Java庫。永遠(yuǎn)免費(fèi)和開源(Apache License,版本2.0),JJWT很容易使用和理解。它被設(shè)計(jì)成一個(gè)以建筑為中心的流暢界面,隱藏了它的大部分復(fù)雜性。
JJWT的目標(biāo)是最容易使用和理解用于在JVM上創(chuàng)建和驗(yàn)證JSON Web令牌(JWTs)的庫。
JJWT是基于JWT、JWS、JWE、JWK和JWA RFC規(guī)范的Java實(shí)現(xiàn)。
JJWT還添加了一些不屬于規(guī)范的便利擴(kuò)展,比如JWT壓縮和索賠強(qiáng)制。
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()
//設(shè)置id,{"jti":""}
.setId("9527")
//{"sub":""}
.setSubject("JJWT")
//{"iat":""}
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256,"xxxxx")
//過期時(shí)間,指定從現(xiàn)在開始到什么時(shí)候過期,{"exp":""}
.setExpiration(new Date(exp))
//自定義聲明,參數(shù)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("中國"));
}
總結(jié)
- 上一篇: Jacob解决Word文档的读写问题
- 下一篇: AO 直接调用GeoProcessing