本篇文章主要解析上一篇:代码解析之登录(1)里的第8行代码调用 TokenUtils 类里的genToken
方法
https://blog.csdn.net/m0_67930426/article/details/135327553?spm=1001.2014.3001.5501
genToken方法代码如下:
public static String genToken(String userId, String sign) {
return JWT.create().withAudience(userId)
.withExpiresAt(DateUtil.offsetHour(new Date(), 2))
.sign(Algorithm.HMAC256(sign));
}
这段代码用于生成一个JWT, JWT的全称是 Json? Web??Token,它定义了一种紧凑,自包含的方式,用于在各方之间作为 Json 对象传递信息
?解析如下:
1.
public static String genToken(String userId, String sign) {
这一行代码定义了一个静态的公共方法,方法名为genToken ,它接收两个字符串参数,分别是 userId 和 sign, 该方法返回一个字符串,该字符串表示生成的 JWT
2.
? return JWT.create().withAudience(userId)?
生成 JWT:
使用JWT.create() 方法创建一个 JWT 实例
设置受众:
.withAudience(userId)?
将 userId 作为 JWT 的 受众 保存到 token 中,在 JWT中受众是一个字符串,表示接收此令牌的实体。在这里它将用户的 id 作为受众保存到 token ,以便后续验证该令牌时知道他是哪个用户生成的。
3.?
? .withExpiresAt(DateUtil.offsetHour(new Date(), 2))?
这行代码设置 JWT 过期的时间,它使用 DateUtil.offsetHour 方法,将当前时间(? new Date()? ?)? 往后偏移2小时,这意味着生成的JWT ,将在2小时后过期,这一步骤的作用是确保生成的令牌在一段时间内自动失效,从而提高安全性
4.?
? .sign(Algorithm.HMAC256(sign));?
这一行代码使用 HMAC256 算法,这是一种对称密钥加密算法,和提供的sign参数(密码或密钥)对JWT进行签名,这样做的目的是确保令牌的完整性和真实性,防止被篡改。
这个方法通常用于身份验证,授权场景,其中客户端(如web浏览器或者移动应用)需要凭据来访问受保护的资源和服务。一旦客户端获取到 JWT ,它就可以在随后的请求发送该令牌,以证明身份并请求访问受保护的资源或服务。服务器端可以验证这个令牌,确认客户端的身份,并据此授予相应的访问权限。?