jwt 解析 token java 代码
时间: 2023-09-06 15:05:11 浏览: 484
### 回答1:
要在 Java 中解析 JWT,您需要使用 JWT 库。这是一个示例代码:
```
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
// 解析 JWT
String jwt = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2huIERvZSIsImV4cCI6MTU5MzY0MTAzMH0.m1GQKbq_O3OLaJFZo2PQRlKjYG9O-VC1N0gL-cjJb3k";
Jws<Claims> claims = Jwts.parser()
.setSigningKey("secretkey")
.parseClaimsJws(jwt);
String subject = claims.getBody().getSubject();
// 创建 JWT
Claims claims = Jwts.claims().setSubject("John Doe");
claims.put("userId", "12345");
claims.put("role", "admin");
String jwt = Jwts.builder()
.setClaims(claims)
.signWith(SignatureAlgorithm.HS256, "secretkey")
.compact();
```
在这里,我们使用了 `io.jsonwebtoken` 库中的 `Jwts` 工具类来创建和解析 JWT。
首先,使用 `Jwts.parser().setSigningKey("secretkey").parseClaimsJws(jwt)` 方法来解析 JWT。该方法返回一个 `Jws` 类型的对象,其中包含 JWT 的声明(claims)。您可以使用 `claims.getBody().getSubject()` 来获取 JWT 中设置的主题(subject)。
然后,使用 `Jwts.claims().setSubject("John Doe")` 创建声明对象,并使用 `claims.put("userId", "12345")` 和 `claims.put("role", "admin")` 方法来设置其他声明。最后,使用 `Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, "secretkey").compact()` 方法来创建带有签名的 JWT。
### 回答2:
JWT(JSON Web Token)是一种用于进行身份验证和授权的开放标准。在Java中,我们可以使用一些库来解析JWT Token。
一种常用的库是Java JWT(jjwt)。它是一个用于创建和解析JWT的库,可以在Java应用程序中使用。
以下是使用Java JWT库解析Token的示例代码:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
public class JWTDecoder {
private static final Key SECRET_KEY = Keys.hmacShaKeyFor("your-secret-key".getBytes());
public static void main(String[] args) {
String token = "your-JWT-token";
try {
Claims claims = Jwts.parserBuilder()
.setSigningKey(SECRET_KEY)
.build()
.parseClaimsJws(token)
.getBody();
// 获取Token中的信息
String username = claims.getSubject();
String userId = claims.get("userId", String.class);
System.out.println("Username: " + username);
System.out.println("User ID: " + userId);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Token验证失败");
}
}
}
```
在上面的代码中,我们使用了一个密钥(SECRET_KEY),这个密钥用于验证JWT的签名。需要使用生成Token时使用的密钥进行解析。
首先,我们将JWT Token作为字符串传递给`parseClaimsJws`方法进行解析。然后,我们可以通过`getBody`方法获取Token中的声明(claims)。
在上述示例代码中,我们获取了用户名和用户ID,并将其打印在控制台上。
需要注意的是,此代码只是简单示例,应根据实际需求进行修改和优化。另外,确保密钥的安全性非常重要,应采取必要的措施来妥善保存密钥。
阅读全文