private static final String KEY = "abcdef";
/**
* 生成token
*
* @param payload 可以存放用户的一些信息,不要存放敏感字段
* @return
*/
public static String createToken(Map<String, Object> payload) {
//十分重要,不禁用发布到生产环境无法验证
GlobalBouncyCastleProvider.setUseBouncyCastle(false);
DateTime now = DateTime.now();
DateTime expTime = now.offsetNew(DateField.HOUR, 24);
// 签发时间
payload.put(RegisteredPayload.ISSUED_AT, now);
// 过期时间
payload.put(RegisteredPayload.EXPIRES_AT, expTime);
// 生效时间
payload.put(RegisteredPayload.NOT_BEFORE, now);
String token = JWTUtil.createToken(payload, KEY.getBytes());
LOG.info("生成JWT token:{}", token);
return token;
}
/**
* 检验token是否有效
*
* @param token
* @return
*/
public static boolean validate(String token) {
GlobalBouncyCastleProvider.setUseBouncyCastle(false);
try {
JWT jwt = JWTUtil.parseToken(token).setKey(KEY.getBytes());
// validate包含了verify
boolean validate = jwt.validate(0);
LOG.info("JWT token校验结果:{}", validate);
return validate;
} catch (Exception e) {
log.info("检验token异常{}", e.getMessage());
return false;
}
}
/**
* 获取payload里的内容
*
* @param token
* @return
*/
public static JSONObject getJSONObject(String token) {
GlobalBouncyCastleProvider.setUseBouncyCastle(false);
if (!validate(token)) {
return new JSONObject();
}
JWT jwt = JWTUtil.parseToken(token).setKey(KEY.getBytes());
JSONObject payloads = jwt.getPayloads();
payloads.remove(RegisteredPayload.ISSUED_AT);
payloads.remove(RegisteredPayload.EXPIRES_AT);
payloads.remove(RegisteredPayload.NOT_BEFORE);
LOG.info("根据token获取原始内容:{}", payloads);
return payloads;
}
这一步非常重要,否则部署项目会发生JCE cannot authenticate the provider BC
BouncyCastle类是一个加密的第三方类,关闭它使用jdk自带的加密算法
GlobalBouncyCastleProvider.setUseBouncyCastle(false);文章来源地址https://www.toymoban.com/news/detail-618088.html
文章来源:https://www.toymoban.com/news/detail-618088.html
到了这里,关于封装hutool工具生成JWT token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!