SpringBoot生成token的代码
时间: 2024-03-17 12:20:30 浏览: 61
以下是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的过期时间,单位为秒。
阅读全文