package org.example.util;
|
|
import com.auth0.jwt.JWT;
|
import com.auth0.jwt.JWTVerifier;
|
import com.auth0.jwt.algorithms.Algorithm;
|
import com.auth0.jwt.exceptions.JWTDecodeException;
|
import com.auth0.jwt.interfaces.DecodedJWT;
|
import lombok.extern.slf4j.Slf4j;
|
import org.example.pojo.User;
|
|
/**
|
* @program: demo
|
* @description:
|
* @create: 2024-07-29 15:45
|
**/
|
@Slf4j
|
public class JwtUtil {
|
/**
|
* 使用固定的解密秘钥
|
*/
|
private static final String SECRET = "admin";
|
|
/**
|
* @version: V1.0
|
* @description: 生成token并验证token并解密token中的信息
|
* @param: userInfo 用户账号和用户Id
|
* @return: java.lang.String 返回token
|
**/
|
public static String getToken(User userInfo) {
|
try{
|
//用秘钥生成签名
|
Algorithm algorithm = Algorithm.HMAC256(SECRET);
|
//默认头部+载荷(账号/id)+签名=jwt
|
String jwtToken= JWT.create()
|
.withClaim("account", userInfo.getAccount())
|
.withClaim("id", userInfo.getId())
|
.withClaim("isRoot",userInfo.getIsRoot())
|
.sign(algorithm);
|
log.info("用户{}的token生成成功:{}",userInfo.getId(),jwtToken);
|
return jwtToken;
|
}catch (Exception e){
|
log.error("用户{}的token生成异常:{}",userInfo.getId(),e);
|
return null;
|
}
|
}
|
|
/**
|
* @version: V1.0
|
* @description: 校验token是否正确
|
* @param: token
|
* @param: userPhone
|
* @return: UserInfoEntity token中的用户信息(账号/id)
|
**/
|
public static User verify(String token) {
|
try {
|
// 根据用户信息userInfo生成JWT效验器
|
Algorithm algorithm = Algorithm.HMAC256(SECRET);
|
JWTVerifier verifier = JWT.require(algorithm)
|
.build();
|
// 效验TOKEN
|
verifier.verify(token);
|
log.info("token:{}校验成功成功",token);
|
//返回token内容
|
return getTokenInfo(token);
|
} catch (Exception exception) {
|
log.error("token校验异常:{}",exception);
|
return null;
|
}
|
}
|
|
/**
|
* @version: V1.0
|
* @Title: getUsername
|
* @description: 从Token中解密获得Token中的用户信息
|
* @param: token
|
* @return: UserInfoEntity token中的用户信息(账号/id)
|
**/
|
private static User getTokenInfo(String token) {
|
try {
|
DecodedJWT jwt = JWT.decode(token);
|
User userInfo=new User();
|
|
userInfo.setAccount(jwt.getClaim("account").asString());
|
userInfo.setId(jwt.getClaim("id").asInt());
|
userInfo.setIsRoot(jwt.getClaim("isRoot").asInt());
|
log.info("用户{}从token获取用户信息成功",userInfo.getId());
|
return userInfo;
|
} catch (JWTDecodeException e) {
|
log.error("从token:{}获取用户信息异常:{}",token,e);
|
return null;
|
}
|
}
|
}
|