Java 生成 JWT Token 科普文章
JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。JWT可以被验证和信任,因为它可以被数字签名。在本文中,我们将探讨如何在Java中生成JWT Token。
准备工作
在开始之前,我们需要添加一些依赖项到我们的项目中。我们将使用jjwt
库来生成JWT Token。首先,在pom.xml
文件中添加以下依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
生成JWT Token
生成JWT Token的过程可以分为以下几个步骤:
- 定义JWT的头部:通常包含令牌的类型和使用的签名算法。
- 定义JWT的负载:包含一些声明,例如用户ID、用户名等。
- 定义JWT的签名:使用密钥和签名算法生成签名。
以下是生成JWT Token的示例代码:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JWTTokenGenerator {
public static void main(String[] args) {
String secretKey = "your-secret-key";
String issuer = "your-issuer";
String subject = "your-subject";
String audience = "your-audience";
Date expiration = new Date(System.currentTimeMillis() + 3600000); // 1 hour later
Map<String, Object> claims = new HashMap<>();
claims.put("user_id", "123456");
claims.put("username", "example_user");
String token = Jwts.builder()
.setClaims(claims)
.setIssuer(issuer)
.setSubject(subject)
.setAudience(audience)
.setIssuedAt(new Date())
.setExpiration(expiration)
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
System.out.println("JWT Token: " + token);
}
}
解析JWT Token
解析JWT Token的过程包括验证签名和提取负载中的声明。以下是解析JWT Token的示例代码:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jws;
import java.util.Map;
public class JWTTokenParser {
public static void main(String[] args) {
String secretKey = "your-secret-key";
String token = "your-jwt-token";
JwtParser jwtParser = Jwts.parser().setSigningKey(secretKey);
Jws<Claims> claimsJws = jwtParser.parseClaimsJws(token);
Claims claims = claimsJws.getBody();
System.out.println("Issuer: " + claims.getIssuer());
System.out.println("Subject: " + claims.getSubject());
System.out.println("Audience: " + claims.getAudience());
System.out.println("Expiration: " + claims.getExpiration());
System.out.println("User ID: " + claims.get("user_id"));
System.out.println("Username: " + claims.get("username"));
}
}
关系图
以下是JWT Token生成和解析过程中涉及的实体关系图:
erDiagram
CLAIMS ||--o JWT
JWT {
int id
string type
string algorithm
string issuer
string subject
string audience
date issuedAt
date expiration
}
CLAIMS {
string key
string value
}
甘特图
以下是生成和解析JWT Token的过程的甘特图:
gantt
title JWT Token Process
dateFormat YYYY-MM-DD
section Generate JWT Token
Define JWT Header :done, des1, 2022-01-01,2022-01-02
Define JWT Payload :done, des2, after des1, 2022-01-03
Define JWT Signature :done, des3, after des2, 2022-01-04
section Parse JWT Token
Verify JWT Signature :active, des4, 2022-01-05, 2022-01-06
Extract JWT Claims :after des4, 2022-01-07
结语
通过本文,我们了解了如何在Java中生成和解析JWT Token。JWT Token是一种安全且易于使用的方法,用于在各方之间传输信息。希望本文对您有所帮助。