对JWT令牌的小理解
·
- 其实本质一张数字身份证,在登陆的时候客户端从login发送请求,由过滤器先忽略,随后到有工具类生成令牌,返回给客户端,然后客户端每次的请求都会带着这个token,由过滤器来过滤,保证每一次操作都只能由登录的客户使用
- 主要分为三段, Header(加密算法):就是有alg(加密算法),typ(固定的JWT)
Payload(用户信息):(exp,过期的时间戳)(userld,自定义)
Signature(签名):把header+拼接好的载荷用算法来求出签名
public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
// 指定签名的时候使用的签名算法,也就是header那部分
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
// 生成JWT的时间,转成Date对象,ttlMillis就是有效时间
long expMillis = System.currentTimeMillis() + ttlMillis;
Date exp = new Date(expMillis);
// 开始拼接最后的token
JwtBuilder builder = Jwts.builder()
//这里与下面的signWith结合后就是payload,只不过这个特殊,他主动装载了载荷,所以要先定义,正常的payload后面就是userld,但这个直接将几个属性一并封装到了map这个集合后再这个传入,可计算的属性就多了
.setClaims(claims)
// 这个里面写的都是计算的规则,payload与header会自动拼接成字符串后传这个里面计算,最后的结果就是签名
.signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
// 设置过期时间
.setExpiration(exp);
//这是最后拼接返回的token
return builder.compact();
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)