1.什么是JWT?
JSON Web Token,通过数字签名的方式,以JSON为载体,在不同终端安全传输信息。
2.有什么用?
授权认证,用户一旦登录,后续每个请求都包含JWT,系统每次处理用户请求之前,都要进行JWT的安全校验,通过之后再进行处理。(可理解为发放的出入证件,可以用来保护后后台接口。)
3.JWT的组成
三个部分,由"."连接。
aaaaaa.bbbbbb.cccccc
第一部分(aaaaaa):Header,还要经过base64,才能构成第一部分。
{
'typ':'JWT', //token的类型
'alg':'HS256', //算法
}
第二部分(bbbbbb): Payload(载荷) 还要经过base64,才能构成第二部分。
Payload分为三个部分,分别是:标准中注册的声明、公共的声明、私有的声明。
{
"sub":'1234567890',
"name":'john',
"admin":true
}
第三部分(cccccc): Signature(签名)
将编码之后的header和payload加.拼接后,通过header中声明的加密方式加密,构成第三部分。
二、使用var encodedString = base64UrlEncode(header)+'.'+base64UrlEncode(payload);
var signature = HMACSHA256(encodingString,'secret');
1.pom.xml中导入依赖
io.jsonwebtoken jjwt0.9.1
2、JWT编码
package com.zy.utils; import io.jsonwebtoken.*; import org.junit.Test; import javax.security.auth.Subject; import java.util.Date; import java.util.UUID; public class JWT { private long time =1000*60*24; private String signature = "admin"; @Test public void jwt(){ JwtBuilder jwtBuilder = Jwts.builder();//builder是用来构建jwt的对象 String jwToken = jwtBuilder //Header的设置 .setHeaderParam("typ","Jwt") .setHeaderParam("alg","HS256") //PayLoad的设置 .claim("username","tom") .claim("role","admin") .setSubject("admin-test") .setExpiration(new Date(System.currentTimeMillis()+time))//有效期oneday .setId(UUID.randomUUID().toString()) //Signture的设置 .signWith(SignatureAlgorithm.HS256,signature) .compact(); System.out.println(jwToken); } @Test public void parser(){ //这里的token是运行jwt()之后产生的token。 String token = "eyJ0eXAiOiJKd3QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE2NDI4MzcwNTIsImp0aSI6IjE0Zjk2ZDA0LWZiYjItNDMyMy1iMDYzLTI1MTViMzA1OWMzNCJ9.CpwjEGWe0iMJIf6V82r195fh3BZgthMmIlLzZb9Qf1U"; JwtParser jwtParser =Jwts.parser(); JwsclaimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(token);//通过这个签名signature对token进行解析。 Claims claims = claimsJws.getBody(); System.out.println(claims.get("username")); System.out.println(claims.get("role")); System.out.println(claims.getId()); System.out.println(claims.getSubject()); System.out.println(claims.getExpiration()); } }
运行完jwt()的结果:
运行完parser()之后的结果:
在此感谢 楠哥教你学Java 分享的视屏,在此感谢带我走上学习道路上的各位老师,以后我也会学习他们身上的优良品质,为其他人百忧解难,让这份心情传递下去。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)