.setExpiration(new Date(System.currentTimeMillis() + expire))与.setExpiration(new Date(now.getTime() + expire))区别
时间: 2024-04-26 20:23:23 浏览: 121
这两种方式都是设置 JWT 过期时间的方法,但是它们的参数类型不同。
.setExpiration(new Date(System.currentTimeMillis() + expire)) 中的参数是一个 long 类型的毫秒数,表示从当前时间开始,多少毫秒后 JWT 过期。
而 .setExpiration(new Date(now.getTime() + expire)) 中的参数是一个 java.util.Date 对象,表示从当前时间开始,多少毫秒后 JWT 过期。
两种方式的本质是相同的,都是计算 JWT 过期的时间,只是参数类型不同。如果你已经有了一个 Date 对象,可以使用第二种方式;如果你只有一个毫秒数,可以使用第一种方式。
相关问题
Jwts.builder() .setId(String.valueOf(userId)) .setSubject(username) .setIssuedAt(now) .setExpiration(expiration) .signWith(SignatureAlgorithm.HS512, SECRET_KEY) .compact();与Jwts.builder() .addClaims(claims) .signWith(SignatureAlgorithm.HS256, signKey) .setExpiration(new Date(System.currentTimeMillis() + expire)) .compact();含义与区别
这两种方式都是使用 JWT Builder 来构建 JWT Token 的方法,但是它们的具体实现和使用场景略有不同。
第一种方式使用了 setId()、setSubject()、setIssuedAt() 和 setExpiration() 方法来设置 JWT 的一些标准声明(Standard Claims),同时使用 signWith() 方法来指定 JWT 签名算法和密钥。常见的标准声明包括 JWT 的唯一标识符、主题、签发时间和过期时间等,这些声明可以被接收 JWT 的各方验证和使用。这种方式适用于标准的 JWT Token 需要包含的信息比较简单的情况。
第二种方式使用了 addClaims() 方法来添加 JWT Token 的一些声明,可以自定义一些声明,同时使用 signWith() 方法来指定 JWT 签名算法和密钥,使用 setExpiration() 方法来设置 JWT 过期时间。这种方式适用于需要自定义一些声明的情况,比如需要添加用户角色、权限等信息。
另外,第一种方式使用了 HS512 算法进行签名,密钥为 SECRET_KEY,而第二种方式使用了 HS256 算法进行签名,密钥为 signKey,这两种算法的安全性略有不同,HS512 相对于 HS256 更加安全,但是也会造成一定的性能损失。
总之,选择使用哪一种方式,需要根据具体的使用场景和需求来决定。
String jwt = Jwts.builder() .setClaims(claims) //自定义内容(载荷) .signWith(SignatureAlgorithm.HS256, "wpf") //签名算法 .setExpiration(new Date(System.currentTimeMillis() + 24*3600*1000)) //有效期 .compact();
您的第一个问题是关于JWT的创建和签名。这段代码使用了JJWT库来创建和签名JWT(JSON Web Token)。以下是对代码的解释:
- `Jwts.builder()`: 创建一个JWT构造器。
- `setClaims(claims)`: 设置自定义内容(载荷),`claims`是一个`Map`类型的对象,用于存储自定义的键值对。
- `signWith(SignatureAlgorithm.HS256, "wpf")`: 使用HS256算法和密钥"wpf"对JWT进行签名。HS256是一种常用的对称加密算法,密钥用于验证和生成签名。
- `setExpiration(new Date(System.currentTimeMillis() + 24*3600*1000))`: 设置JWT的有效期为当前时间加上24小时(24*3600*1000毫秒)。
- `compact()`: 生成最终的JWT字符串。
因此,这段代码的作用是创建一个包含自定义内容、使用HS256算法签名、有效期为24小时的JWT,并将其转换为字符串表示形式。
阅读全文