在上述实例中,请写出jwtTokenUtil工具类中的内容
时间: 2024-03-22 18:42:15 浏览: 51
好的,下面是一个可能的jwtTokenUtil工具类的代码实现:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
@Component
public class JwtTokenUtil {
private static final long JWT_TOKEN_VALIDITY = 5 * 60 * 60; // token有效期为5小时
@Value("${jwt.secret}")
private String secret; // 密钥
// 根据token获取用户名
public String getUsernameFromToken(String token) {
return getClaimFromToken(token, Claims::getSubject);
}
// 根据token获取过期时间
public Date getExpirationDateFromToken(String token) {
return getClaimFromToken(token, Claims::getExpiration);
}
// 根据token获取指定信息
public <T> T getClaimFromToken(String token, Function<Claims, T> claimsResolver) {
final Claims claims = getAllClaimsFromToken(token);
return claimsResolver.apply(claims);
}
// 获取token中的所有信息
private Claims getAllClaimsFromToken(String token) {
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
}
// 判断token是否过期
private Boolean isTokenExpired(String token) {
final Date expiration = getExpirationDateFromToken(token);
return expiration.before(new Date());
}
// 生成token
public String generateToken(UserDetails userDetails) {
Map<String, Object> claims = new HashMap<>();
return doGenerateToken(claims, userDetails.getUsername());
}
// 根据用户信息生成token
private String doGenerateToken(Map<String, Object> claims, String subject) {
final Date createdDate = new Date();
final Date expirationDate = new Date(createdDate.getTime() + JWT_TOKEN_VALIDITY * 1000);
return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(createdDate)
.setExpiration(expirationDate).signWith(SignatureAlgorithm.HS512, secret).compact();
}
// 验证token是否有效
public Boolean validateToken(String token, UserDetails userDetails) {
final String username = getUsernameFromToken(token);
return (username.equals(userDetails.getUsername()) && !isTokenExpired(token));
}
}
```
该工具类中实现了以下方法:
- `getUsernameFromToken(token)`:从token中获取用户名
- `getExpirationDateFromToken(token)`:从token中获取过期时间
- `getClaimFromToken(token, claimsResolver)`:从token中获取指定信息
- `isTokenExpired(token)`:判断token是否过期
- `generateToken(userDetails)`:根据用户信息生成token
- `doGenerateToken(claims, subject)`:根据用户信息生成token
- `validateToken(token, userDetails)`:验证token是否有效
其中,`JWT_TOKEN_VALIDITY`为token的有效期,`secret`为jwt的密钥,这些信息可以在配置文件中配置。
阅读全文