目录
1.创建一个maven项目
2.添加依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
</dependency>
3.创建 JwtUtil 工具类
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.SignatureException;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.MalformedJwtException;
import io.jsonwebtoken.UnsupportedJwtException;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "yourSecretKey"; // 请更换为你的密钥
private static final long EXPIRATION_TIME = 86400000; // 1天的毫秒数
// 生成JWT
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
// 验证JWT
public static Claims validateToken(String token) {
try {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
} catch (SignatureException | ExpiredJwtException | MalformedJwtException |
UnsupportedJwtException | IllegalArgumentException e) {
// 无效的JWT
return null;
}
}
// 从JWT中获取用户名
public static String getUsernameFromToken(String token) {
Claims claims = validateToken(token);
return claims != null ? claims.getSubject() : null;
}
// 检查JWT是否过期
public static boolean isTokenExpired(String token) {
Claims claims = validateToken(token);
return claims == null || claims.getExpiration().before(new Date());
}
}
4.创建控制器类
创建一个新的控制器类 JwtController
来处理 JWT 的生成和验证请求。
package com.example.jwt;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/api/jwt")
public class JwtController {
//生成jwt
@PostMapping("/generate")
public String generateToken(@RequestParam String claims) {
return JwtUtil.generate(claims);
}
//验证jwt
@GetMapping("/verify")
public boolean verifyToken(@RequestParam String token) {
return JwtUtil.verify(token);
}
//获取 Claims
@GetMapping("/claims")
public Map<String, Object> getClaims(@RequestParam String token) {
return JwtUtil.getClaim(token);
}
}