jwt简介与简单使用
JSON WEB Token简称jwt,是一种基于JSON的、声明某种主张的令牌(token)。JWT通常由三部分组成: 头信息(header), 载荷(payload)和签名(signature),使用Base64 URL算法将上述JSON对象转换为字符串保存。Base64是一种编码,是可逆的,所以,在JWT中,不应该在负载里面加入任何敏感的数据。
头一般声明算法和令牌类型,如:
{
"alg": "HS256",
"typ": "JWT"
}
其中,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,为jwt类型就写成jwt。
载荷部分一般为jwt要发送的数据,有以下几个关键字:
iss:发行人 exp:到期时间 sub:主题 aud:用户 nbf:在此之前不可用
iat:发布时间 jti:JWT ID用于标识该JWT
此外,我们也可以自定义一些关键字。
签名部分是对上面两部分数据使用特定的密码进行加密,在计算出签名后,jwt头,有效载荷和签名哈希的三个部分组合成一个字符串,每个部分用"."分隔,就构成整个jwt对象。
使用案例:
1.引入依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
2.生成JWT
//生成jwt
public void createJwt(){
long now=System.currentTimeMillis();
long exp=now+600*1000;
JwtBuilder builder = Jwts.builder();
//唯一id:{"id":"888"}
builder.setId("258")
//接收用户名:{"sub":"孙笑川"}
.setSubject("孙笑川")
//签发时间:{"iat":"....."}
.setIssuedAt(new Date())
//签名 加密算法和盐
.signWith(SignatureAlgorithm.HS256,"1024")
//设置失效时间
.setExpiration(new Date(exp));
//自定义声明 .claim("name","74120");
//签发token
String token=builder.compact();
System.out.println(token);
}
3.解析jwt
public void DecodeToken(String token){
Claims body = (Claims) Jwts.parser()
//设置解析的密码
.setSigningKey("1024").parse(token).getBody();
System.out.println(body.getId());
System.out.println(body.getIssuedAt());
System.out.println(body.getSubject());
System.out.println(body.getExpiration());
System.out.println(body.get("name"));
}

浙公网安备 33010602011771号