Jwt令牌
简介
全称:JSON Web Token (jwt.io)
定义了一种简介、自包含的格式,用于在通信双方以json数据格式安全的传输信息,由于数字签名的存在这些信息是可靠的
组成
- 第一部分:Header(头),记录令牌类型、签名算法等。例如:{ralg":"HS256","type":"JWT}
- 第二部分:Payload(有效裁荷),携带一些自定义信息、默认信息等。例如:[rid":"1","username":"Tom}
- 第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。

登录认证
- 登录成功后,生成令牌
- 后续每个请求,都要携带JWT令牌,系统在每次请求处理之前,先校验令牌,通过后,再处理

maven坐标
java
<dependency>
<groupld>io.jsonwebtoken</groupld>
<artifactld>jwt</artifactld>
<version>0.9.1</version>
</dependency>
令牌生成
java
@Test
public void genjwt(){
Map<String,Object> claims = new HashMap<>();
claims.put("id",1);
claims.put("username","Tom");
String jwt = jwts.builder()
.setClaims(claims)//自定义内容
.signWith(SignatureAlgorithm.HS256,"itheima")//数字签名
.setExpiration(new Date(System.currentTimeMillis())+12*3600*100)//有效期
.compact();
}
令牌校验
java
@Test
public void parsejwt(){
Claims claims = Jwts.parser()
.setSigningKey("itheima")
.parseClaimsjws(token)//需要解析的令牌
.getBody()
}
注意
- JWT校验时使用的签名秘钥,必须和生成WT令牌时使用的秘钥是配套的。
- 如果JWT令牌解析校验时报错,则说明JWT令牌被纂改或失效了,令牌非法。