java JWT 怎么使用
时间: 2024-08-15 16:03:23 浏览: 132
在Java中使用JWT(JSON Web Token),通常涉及以下几个步骤:
### 创建和签发JWT
1. **创建JWT对象**:
首先需要一个包含用户信息(如用户名、角色等)的Claims对象,并定义一个JWT Builder:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
// ...
Claims claims = Jwts.claims()
.setSubject("username") // 主题
.set("role", "admin") // 其他声明
.build();
// 设置私钥和签名算法(这里以HS256为例)
String secretKey = "your_secret_key";
SignatureAlgorithm algorithm = SignatureAlgorithm.HS256;
```
2. **生成JWT字符串**:
使用Builder将Claims签名:
```java
String jwt = Jwts.builder()
.setClaims(claims)
.setSignatureAlgorithm(algorithm)
.signWith(secretKey)
.compact(); // 缩小到一个字符串
```
### 解析和验证JWT
1. **接收JWT**:
当从客户端获取JWT时,把它作为HTTP请求头的一部分(例如:Authorization: Bearer <token>`)。
2. **解析JWT**:
使用JWT parser尝试解析它:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
// ...
public Claims parseToken(String jwt) {
try {
return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();
} catch (Exception e) {
throw new RuntimeException("Invalid JWT", e);
}
}
```
3. **验证JWT**:
检查JWT是否有效,比如确认过期、签名是否正确等:
```java
// 对于每个声明,可以做进一步的验证
Claims claims = parseToken(jwt);
if (!claims.getExpiresAt().isAfterNow()) {
throw new IllegalArgumentException("JWT has expired");
}
if (!claims.getIssuer().equals("expected_issuer")) {
throw new RuntimeException("Invalid issuer");
}
```
阅读全文