创建JWT令牌
在使用JWT进行身份验证和授权之前,我们需要创建JWT令牌。可以使用以下代码创建JWT令牌:
代码语言:javascript复制@Component
public class JwtTokenUtil {
private String secret = "my-secret-key";
public String generateToken(UserDetails userDetails) {
Map<String, Object> claims = new HashMap<>();
return doGenerateToken(claims, userDetails.getUsername());
}
private String doGenerateToken(Map<String, Object> claims, String subject) {
long expirationTimeInMs = 3600000; // 1 hour
Date expirationTime = new Date(System.currentTimeMillis() expirationTimeInMs);
return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(expirationTime)
.signWith(SignatureAlgorithm.HS512, secret).compact();
}
public String getUsernameFromToken(String token) {
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getSubject();
}
public boolean validateToken(String token, UserDetails userDetails) {
final String username = getUsernameFromToken(token);
return (username.equals(userDetails.getUsername()) && !isTokenExpired(token));
}
private boolean isTokenExpired(String token) {
final Date expiration = getExpirationDateFromToken(token);
return expiration.before(new Date());
}
private Date getExpirationDateFromToken(String token) {
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getExpiration();
}
}
上述代码中,我们定义了一个名为“JwtTokenUtil”的类,它提供了生成JWT令牌、从令牌中获取用户名、验证令牌是否有效等方法。其中,我们使用了“my-secret-key”作为密钥,用于签署JWT令牌。请注意,密钥应该是一个安全的随机字符串,不要硬编码在代码中。