当前位置:网站首页>8-jwt工具类
8-jwt工具类
2022-08-03 00:34:00 【张 邵】
JwtUtil
package com.zs.utils.jwt;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.UUID;
/** * JWT工具类 */
public class JwtUtil {
//有效期为
public static final Long JWT_TTL = 60 * 60 *1000L;// 60 * 60 *1000 一个小时
//设置秘钥明文
public static final String JWT_KEY = "sangeng";
public static String getUUID(){
String token = UUID.randomUUID().toString().replaceAll("-", "");
return token;
}
/** * 生成jtw * @param subject token中要存放的数据(json格式) * @return */
public static String createJWT(String subject) {
JwtBuilder builder = getJwtBuilder(subject, null, getUUID());// 设置过期时间
return builder.compact();
}
/** * 生成jtw * @param subject token中要存放的数据(json格式) * @param ttlMillis token超时时间 * @return */
public static String createJWT(String subject, Long ttlMillis) {
JwtBuilder builder = getJwtBuilder(subject, ttlMillis, getUUID());// 设置过期时间
return builder.compact();
}
private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
SecretKey secretKey = generalKey();
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
if(ttlMillis==null){
ttlMillis=JwtUtil.JWT_TTL;
}
long expMillis = nowMillis + ttlMillis;
Date expDate = new Date(expMillis);
return Jwts.builder()
.setId(uuid) //唯一的ID
.setSubject(subject) // 主题 可以是JSON数据
.setIssuer("sg") // 签发者
.setIssuedAt(now) // 签发时间
.signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥
.setExpiration(expDate);
}
/** * 创建token * @param id * @param subject * @param ttlMillis * @return */
public static String createJWT(String id, String subject, Long ttlMillis) {
JwtBuilder builder = getJwtBuilder(subject, ttlMillis, id);// 设置过期时间
return builder.compact();
}
public static void main(String[] args) throws Exception {
String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJjYWM2ZDVhZi1mNjVlLTQ0MDAtYjcxMi0zYWEwOGIyOTIwYjQiLCJzdWIiOiJzZyIsImlzcyI6InNnIiwiaWF0IjoxNjM4MTA2NzEyLCJleHAiOjE2MzgxMTAzMTJ9.JVsSbkP94wuczb4QryQbAke3ysBDIL5ou8fWsbt_ebg";
Claims claims = parseJWT(token);
System.out.println(claims);
}
/** * 生成加密后的秘钥 secretKey * @return */
public static SecretKey generalKey() {
byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY);
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
return key;
}
/** * 解析 * * @param jwt * @return * @throws Exception */
public static Claims parseJWT(String jwt) throws Exception {
SecretKey secretKey = generalKey();
return Jwts.parser()
.setSigningKey(secretKey)
.parseClaimsJws(jwt)
.getBody();
}
}
边栏推荐
- Oracle 暴跌,倒下了!
- Introduction to resubmit Progressive Anti-Duplicate Submission Framework
- 图文详细解决IDEA使用Debug模式启动项目一直转圈圈跑起不来(亲测可以)
- 写一个简单的网站步骤
- 谷歌 Chrome 浏览器 104 正式版发布:加快网页加载,蓝牙 API 改进
- Last Common Ancestor (LCA) Study Notes | P3379 【Template】Least Common Ancestor (LCA) Problem Solution
- 全栈---Proxy
- 增删改查这么多年,最后栽在MySQL的架构设计上!
- 吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第一节:深度学习概论
- 风电场运营实践 | 麒麟信安助力国华投资山东公司集控中心实现安全智慧化运营
猜你喜欢
随机推荐
49. 字母异位词分组-排序法
阿里云增强版实人认证--银行卡要素核验
10. SAP ABAP OData 服务如何支持修改(Update)操作
绿色版-SQL环境搭建
智能合约安全-可重入攻击(SW107-Reentrancy)
2022年8月2日——使用idea搭建servlet+jsp项目
Auto.js 特殊定位控件方法 不能在ui线程执行阻塞操作,请使用setTimeout代替
如何快速对接淘宝开放平台API接口(淘宝店铺订单明文接口,淘宝店铺商品上传接口,淘宝店铺订单交易接口)
暴力递归到动态规划 08(小马走象棋)
面试题 08.07. 无重复字符串的排列组合 ●●
封装和练习题目
TensorFlow学习记录(一):基本介绍
淘宝商品销量接口/淘宝商品销量监控接口/商品累计销量接口代码对接分享
升级版的冒泡排序:鸡尾酒排序(快乐小时排序)
NLP commonly used Backbone model cheat sheet (1)
JS做一个接近无限时长的滚动条
【图像分类】2022-MPViT CVPR
Day117. Shangyitong: Generate registered order module
记一次sql优化Using temporary; Using filesort
稳压电源: 电路图及类型









