public class JWTUtils {
/**
* 生成token,一小时后过期
* @param username 用户名
* @param secret 秘钥
* @return
*/
public static String sign(String username,String secret) {
// 创建 token
String token = JWT.create()
// 数据(也就是 payload 负载)
.withClaim("username", username)
//过期时间 1小时
.withExpiresAt(DateUtil.offsetHour(new Date(),1))
// 设置秘钥
.sign(Algorithm.HMAC256(secret));
return token;
}
/**
* 解密token
* @param token
* @throws Exception
* @return
*/
public static DecodedJWT decoded(String token){
DecodedJWT decode = null;
try {
decode = JWT.decode(token);
}catch (JWTDecodeException e){
return null;
}
return decode;
}
/**
* 根据request中的token获取用户账号
*
* @param request
* @return
*/
public static String getUserNameByToken(HttpServletRequest request) throws Exception {
String accessToken = request.getHeader("X-Access-Token");
String username = getUserNameByToken(accessToken);
if (!StringUtils.hasLength(username)) {
throw new Exception("未获取到用户");
}
return username;
}
/**
* 获得token中的信息无需secret解密也能获得
*
* @return token中包含的用户名
*/
public static String getUserNameByToken(String token) {
try {
DecodedJWT jwt = JWT.decode(token);
return jwt.getClaim("username").asString();
} catch (JWTDecodeException e) {
return null;
}
}
/**
* 校验token是否正确
*
* @param token 密钥
* @param secret 用户的密码
* @return 是否正确
*/
public static boolean verify(String token, String username, String secret) {
try {
// 根据密码生成JWT效验器
DecodedJWT jwt = JWT.require(Algorithm.HMAC256(secret))
.withClaim("username", username)
.build()
.verify(token);
// 效验TOKEN
return true;
} catch (Exception exception) {
return false;
}
}
}
JWT工具类(自用)
最新推荐文章于 2024-08-20 17:22:05 发布