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();含义与区别
时间: 2024-02-14 13:36:00 浏览: 45
这两种方式都是使用 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 更加安全,但是也会造成一定的性能损失。
总之,选择使用哪一种方式,需要根据具体的使用场景和需求来决定。
相关问题
return Jwts.builder() .setId(UUID.randomUUID().toString()) .setIssuedAt(new Date(currentTime)) //签发时间 .setSubject("system") //说明 .setIssuer("heima") //签发者信息 .setAudience("app") //接收用户 .compressWith(CompressionCodecs.GZIP) //数据压缩方式 .signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式 .setExpiration(new Date(currentTime + 3_600 * 1000)) //过期时间戳 .addClaims(claimMaps) //cla信息 .compact();这段代码中3_600是什么意思,为什么要这样写,有什么好处
这段代码中的3_600是一个时间戳,表示以秒为单位的3600秒,也就是1小时。这段代码的作用是设置token的过期时间为1小时,过期后需要重新获取token才能进行操作。这样可以增加系统的安全性,防止token被长时间滥用。将时间戳写成3_600的形式是为了增加代码的可读性,方便开发者快速理解代码的意图。
没有jwt.create()
如果你在使用 Java 编程语言,想要创建 JWT,可以使用 jjwt 库。使用该库,你可以创建一个 JwtBuilder 对象,然后将自定义的声明添加到该对象中,并使用该对象构建 JWT。
以下是使用 jjwt 库创建 JWT 的示例代码:
```java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtCreator {
public static void main(String[] args) {
String secretKey = "mySecretKey"; // 假设这是你的密钥
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
JwtBuilder builder = Jwts.builder()
.setId("jwtId")
.setIssuedAt(now)
.setSubject("jwtSubject")
.setIssuer("jwtIssuer")
.claim("customKey", "customValue") // 自定义声明
.signWith(SignatureAlgorithm.HS256, secretKey.getBytes());
String jwt = builder.compact();
System.out.println(jwt);
}
}
```
在这个示例中,我们使用了一个假设的密钥“mySecretKey”,并添加了一些标准声明和自定义声明。最后,我们使用签名算法 HS256 对 JWT 进行签名,并将其输出到控制台。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)