12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package com.zhentao.system.utils;
- import io.jsonwebtoken.Claims;
- import io.jsonwebtoken.Jwts;
- import io.jsonwebtoken.SignatureAlgorithm;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- public class TokenUtils {
- // 密钥,生产环境应该从配置文件中读取
- private static final String SECRET_KEY = "your-secret-key-here";
- // Token有效期(毫秒),这里设置为24小时
- private static final long EXPIRATION_TIME = 24 * 60 * 60 * 1000;
- /**
- * 生成JWT Token
- * @param userId 用户ID
- * @return JWT Token
- */
- public static String generateToken(String userId) {
- Map<String, Object> claims = new HashMap<>();
- claims.put("userId", userId);
- return Jwts.builder()
- .setClaims(claims)
- .setSubject(userId)
- .setIssuedAt(new Date(System.currentTimeMillis()))
- .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 修正此处
- .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
- .compact();
- }
- /**
- * 从Token中获取用户ID
- * @param token JWT Token
- * @return 用户ID
- */
- public static String getUserIdFromToken(String token) {
- try {
- Claims claims = Jwts.parser()
- .setSigningKey(SECRET_KEY)
- .parseClaimsJws(token)
- .getBody();
- return claims.get("userId", String.class);
- } catch (Exception e) {
- // 处理Token解析异常
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 验证Token是否有效
- * @param token JWT Token
- * @return 是否有效
- */
- public static boolean validateToken(String token) {
- try {
- Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
- return true;
- } catch (Exception e) {
- // 处理Token验证异常
- e.printStackTrace();
- return false;
- }
- }
- /**
- * 从Token中获取所有Claims
- * @param token JWT Token
- * @return Claims
- */
- private static Claims getAllClaimsFromToken(String token) {
- return Jwts.parser()
- .setSigningKey(SECRET_KEY)
- .parseClaimsJws(token)
- .getBody();
- }
- /**
- * 检查Token是否已过期
- * @param token JWT Token
- * @return 是否过期
- */
- private static boolean isTokenExpired(String token) {
- Date expiration = getAllClaimsFromToken(token).getExpiration();
- return expiration.before(new Date());
- }
- }
|