JWT简介
用于通信双方基于JSON数据格式安全的传输信息
组成:(使用Base64编码格式)
第一部分:Heade,记录令牌类型和签名算法,如:{"alg":"HS256","type":"JWT"}
第二部分:Payload:携带一些自定义信息、默认信息
第三部分:Signature,经密钥和算法对header、payload进行计算而来
使用JWT
导入坐标
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dpendency>
生成JWT
public class TestJWT {
@Test
public void generateJWT(){
//添加payload的数据
Map<String,Object> claims = new HashMap<>();
claims.put("id",1);
claims.put("username","张三");
//生产token字符串,secretKey为自定义密钥,ttlMillis是token到期时间
String token = JWT.create()
.withClaim("usr",claims)
.withExpireAt(new Date(System.currentTimeMillis()+1000*60*60*12))
.sign(Algorithm.HMAC256("sky"));
System.out.println(token);
}
}
验证JWT
@Test
public void verifyJWT(){
String token = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjozNDE2NDA1MzU3LCJ1c2VybmFtZSI6IuW8oOS4iSJ9.md7DfOvTgbqM8A2HUjJnLGl1QGXWznMnGiB4q8g0_FY";
//JWT验证器
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("sky")).bilud();
//验证token,返回解析后的JWT对象
DecodedJWT decodedJWT = jwtVerifier.verify(token);
//拿取payload数据
Map<String,Claim> claims = decodedJWT.getClaims();
System.out.println(claims.get("usr"));
}