package com.iailab.module.data.common.utils; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; import java.util.Date; /** * @author PanZhibao * @Description * @createTime 2022年07月20日 11:47:00 */ public class JwtUtils { private static final String USER_INFO_KEY = "username"; /**Token有效期为12小时*/ public static final long EXPIRE_TIME = 60 * 60 * 1000 * 12; /** * 生成Token * @param username 用户标识(唯一) * @param secretKey 签名算法以及密匙 * @return */ public static String generateToken(String username, String secretKey) { Algorithm algorithm = Algorithm.HMAC256(secretKey); Date now = new Date(); Date expireTime = new Date(now.getTime() + EXPIRE_TIME); String token = JWT.create() .withClaim(USER_INFO_KEY, username) .withExpiresAt(expireTime) .sign(algorithm); return token; } /** * 校验token是否正确 * * @param token 密钥 * @param secret 用户的密码 * @return 是否正确 */ public static boolean verify(String token, String username, String secret) { try { // 根据密码生成JWT效验器 Algorithm algorithm = Algorithm.HMAC256(secret); JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); // 效验TOKEN DecodedJWT jwt = verifier.verify(token); return true; } catch (Exception exception) { return false; } } /** * 校验token是否正确 * * @param token * @param secret * @return */ public static boolean verify(String token, String secret) { try { Algorithm algorithm = Algorithm.HMAC256(secret); JWTVerifier verifier = JWT.require(algorithm).build(); // 效验TOKEN DecodedJWT jwt = verifier.verify(token); return true; } catch (Exception exception) { exception.printStackTrace(); return false; } } /** * 从Token中提取用户信息 * @param token * @return */ public static String getUserInfo(String token) { DecodedJWT decodedJWT = JWT.decode(token); String username = decodedJWT.getClaim(USER_INFO_KEY).asString(); return username; } /** * 从Token中提取信息 * @param token * @param key * @return */ public static String getInfo(String token, String key) { DecodedJWT decodedJWT = JWT.decode(token); String username = decodedJWT.getClaim(USER_INFO_KEY).asString(); return username; } }