首页 > 其他分享 >Jwt 工具类

Jwt 工具类

时间:2022-08-29 17:55:35浏览次数:43  
标签:return String Jwt token static claims 工具 public

public class AppJwtUtil {

// TOKEN的有效期一天(S)
private static final int TOKEN_TIME_OUT = 3_600;
// 加密KEY
private static final String TOKEN_ENCRY_KEY = "MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY";
// 最小刷新间隔(S)
private static final int REFRESH_TIME = 300;

// 生产ID
public static String getToken(Long id){
Map<String, Object> claimMaps = new HashMap<>();
claimMaps.put("id",id);
long currentTime = System.currentTimeMillis();
return Jwts.builder()
.setId(UUID.randomUUID().toString())
.setIssuedAt(new Date(currentTime)) //签发时间
.setSubject("system") //说明
.setIssuer("heima") //签发者信息
.setAudience("app") //接收用户
.compressWith(CompressionCodecs.GZIP) //数据压缩方式
.signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式
.setExpiration(new Date(currentTime + TOKEN_TIME_OUT * 1000)) //过期时间戳
.addClaims(claimMaps) //cla信息
.compact();
}

/**
* 获取token中的claims信息
*
* @param token
* @return
*/
private static Jws<Claims> getJws(String token) {
return Jwts.parser()
.setSigningKey(generalKey())
.parseClaimsJws(token);
}

/**
* 获取payload body信息
*
* @param token
* @return
*/
public static Claims getClaimsBody(String token) {
try {
return getJws(token).getBody();
}catch (ExpiredJwtException e){
return null;
}
}

/**
* 获取hearder body信息
*
* @param token
* @return
*/
public static JwsHeader getHeaderBody(String token) {
return getJws(token).getHeader();
}

/**
* 是否过期
*
* @param claims
* @return -1:有效,0:有效,1:过期,2:过期
*/
public static int verifyToken(Claims claims) {
if(claims==null){
return 1;
}
try {
claims.getExpiration()
.before(new Date());
// 需要自动刷新TOKEN
if((claims.getExpiration().getTime()-System.currentTimeMillis())>REFRESH_TIME*1000){
return -1;
}else {
return 0;
}
} catch (ExpiredJwtException ex) {
return 1;
}catch (Exception e){
return 2;
}
}

/**
* 由字符串生成加密key
*
* @return
*/
public static SecretKey generalKey() {
byte[] encodedKey = Base64.getEncoder().encode(TOKEN_ENCRY_KEY.getBytes());
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
return key;
}

public static void main(String[] args) {
/* Map map = new HashMap();
map.put("id","11");*/
System.out.println(AppJwtUtil.getToken(1102L));
Jws<Claims> jws = AppJwtUtil.getJws("eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAADWLQQqEMAwA_5KzhURNt_qb1KZYQSi0wi6Lf9942NsMw3zh6AVW2DYmDGl2WabkZgreCaM6VXzhFBfJMcMARTqsxIG9Z888QLui3e3Tup5Pb81013KKmVzJTGo11nf9n8v4nMUaEY73DzTabjmDAAAA.4SuqQ42IGqCgBai6qd4RaVpVxTlZIWC826QA9kLvt9d-yVUw82gU47HDaSfOzgAcloZedYNNpUcd18Ne8vvjQA");
Claims claims = jws.getBody();
System.out.println(claims.get("id"));

}

}

标签:return,String,Jwt,token,static,claims,工具,public
From: https://www.cnblogs.com/FanKingWang/p/16636790.html

相关文章

  • 文件数据清理工具推荐
    为大家分享一款文件数据清理工具,GhostBusterProforMac能够快速扫描计算机来查找以前删除的应用程序中残留的数据,你可以自由选择要删除的数据以及要保留的数据,支持一键......
  • 前端开发常用工具
    记录自己经常用到的工具,换电脑时使用----------不定时更新 一:电脑相关1.windows系统,安装nvmnode包管理工具,可以切换多个node版本,以适应vue2,vue3,react等开发需求,安......
  • 虚拟机下安装arm-himix200-linux交叉编译工具链
    1. 解压交叉编译工具链arm-himix200-linuxtar-zxvfarm-himix200-linux.tgzcdarm-himix200-linux 2. 进入root模式,安装交叉编译工具链surootsource./arm-himi......
  • java 常用工具类
    1.时间格式化importorg.apache.commons.lang3.time.FastDateFormat;...FastDateFormatdf=FastDateFormat.getInstance("yyyy-mm-dd");//将指定格式字符串(上面的......
  • 工具包
    团队亲测过的效率、社群管理、用户需求解析、竞品分析工具包,分享给大家,希望有帮助~团队协作效率工具包:a、Teambitio——团队任务分配和执行进度管理;b、石墨文档——用于......
  • QT项目二:局域网聊天工具
    QT项目二:局域网聊天工具参考《Qt及QtQuick开发实战精解》,该书介绍的很详细,不做过多介绍。末尾有源码下载地址1.main.cpp#include"widget.h" #include<QApplication> i......
  • 微信网页分享,开发者工具中显示分享成功,但是手机上分享失败的问题
    背景:因为之前的公众号做了迁移,之前的分享已经不能使用.这次重新修改了一下分享代码,却发现怎么都分享不成功,看网页以及微信开发者工具中显示调用api成功了,但是一到手......
  • 后端程序员生产力工具合集
    后端程序员除了写代码,也难免要写设计文档,画各种图。因此掌握各种生产力工具,是很有必要的,可以达到事半功倍的效果。下面结合楼主亲身体验,推荐一些生产力工具,欢迎探讨和补充......
  • RedisInsight :Redis 官方可视化工具
    RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷。可支持String、Hash、Set、List、JSON等多种......
  • PowerShell教程 - 程序性能和BUG分析工具
    更新记录转载请注明出处。2022年8月29日发布。2022年8月29日从笔记迁移到博客。程序性能和BUG分析工具https://hibernatingrhinos.com/products/efprofhttps://s......