如何使用JWTUtils生成token
时间: 2024-01-03 11:04:17 浏览: 29
使用JWTUtils生成token,你需要提供一个主题(subject)和一个过期时间(expiration)。
```java
String = JWTUtils.generateToken("user123", 3600 * 1000); // 主题为"user123",过期时间为1小时
```
这个方法将返回一个包含JWT的紧凑格式字符串。该JWT包含以下声明:
- "sub": "user123",主题为"user123"
- "exp": [过期时间],过期时间为生成token时的当前时间加上3600秒
生成的JWT还包含一个使用HS512算法签名的签名。签名的密钥由`SECRET_KEY`常量指定。
相关问题
java如何使用jwt生成token
在Java中,可以使用com.auth0库来实现JWT的生成和验证。首先,你需要在你的项目中添加该库的依赖:
```xml
<!--JWT-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
```
接下来,你可以使用以下代码创建一个JWT的token:
```java
String token = JWTUtils.createToken(1L);
```
请注意,在上面的例子中,我将token的过期时间设置为10秒。
接下来,如果你想验证token并获取其中的信息,你可以使用以下代码:
```java
try {
Map<String, Claim> stringClaimMap = JWTUtils.verifyToken(token);
Long id = stringClaimMap.get("id").asLong();
System.err.println("用户id是:" + id);
} catch (Exception e) {
e.printStackTrace();
}
```
上面的代码会尝试验证token,并从中获取id这个字段的值。如果token已经过期,会抛出TokenExpiredException异常。
为了处理token过期的情况,你可以使用以下代码:
```java
try {
// 上面的token被我设置成了10秒过期
Thread.sleep(11000L);
JWTUtils.verifyToken(token); // 这里定向捕获登录过期异常
} catch (TokenExpiredException e) {
// 写过期逻辑
System.err.println("登录过期");
} catch (Exception e) {
e.printStackTrace();
}
```
上面的代码会捕获TokenExpiredException异常,你可以在此处编写处理过期逻辑。
最后,你可以使用以下代码来验证token和获取其中的信息:
```java
public static Map<String, Claim> verifyToken(String token) throws Exception {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
DecodedJWT jwt = verifier.verify(token);
return jwt.getClaims();
}
```
上面的代码会使用之前设置的密钥来验证token,并返回包含token中所有声明的Map。
这样,你就可以在Java中使用JWT生成token了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [JWT介绍及用JAVA使用JWT生成token](https://blog.csdn.net/weixin_43085439/article/details/105838751)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
SpringBoot生成token的代码
以下是SpringBoot生成token的示例代码:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class JwtUtils {
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expire}")
private long expire;
/**
* 生成token
* @param userId 用户ID
* @return token
*/
public String generateToken(Long userId) {
Date nowDate = new Date();
// 过期时间
Date expireDate = new Date(nowDate.getTime() + expire * 1000);
return Jwts.builder()
.setHeaderParam("typ", "JWT")
.setSubject(userId.toString())
.setIssuedAt(nowDate)
.setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
/**
* 根据token获取用户ID
* @param token token
* @return 用户ID
*/
public Long getUserId(String token) {
Claims claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
return Long.parseLong(claims.getSubject());
}
/**
* 判断token是否过期
* @param token token
* @return 是否过期
*/
public boolean isTokenExpired(String token) {
Claims claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
Date expiration = claims.getExpiration();
return expiration.before(new Date());
}
}
```
上述代码中,使用了Java JWT库来生成token,其中包含了三个方法:
- `generateToken`:根据用户ID生成token。
- `getUserId`:根据token获取用户ID。
- `isTokenExpired`:判断token是否过期。
在这个示例中,还使用了`@Value`注解来注入配置文件中的`jwt.secret`和`jwt.expire`值。需要在配置文件中添加以下配置项:
```yaml
jwt:
secret: mySecret
expire: 3600
```
其中,`secret`为加密密钥,`expire`为token的过期时间,单位为秒。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)