当前位置:网站首页>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();
}
}
边栏推荐
- vue3的keepAlive缓存组件
- Go高性能之方法接收器 - 指针vs值
- 和睦家私有化后换帅:新风天域吴启楠任CEO 李碧菁靠边站
- Heartwarming AI Review (1)
- 【图像分类】2021-EfficientNetV2 CVPR
- Rasa 3.x study series - Rasa - Issues 4792 socket debug logs clog up debug feed study notes
- 北路智控上市首日破发:公司市值59亿 募资15.6亿
- Understand the next hop address in the network topology in seconds
- 基于rt-thread studio的STM32裸机开发——LED
- ASP.NET网络版进销存管理系统源码【源码免费分享】
猜你喜欢
随机推荐
[NCTF2019]SQLi-1||SQL注入
esp32和ros2基础篇草稿-micro-ros-
Go高性能之方法接收器 - 指针vs值
2022/8/2 考试总结
全栈---Proxy
买了一瓶饮料
10. SAP ABAP OData 服务如何支持修改(Update)操作
SAP 电商云 Spartacus UI 的持续集成 - Continous integration
Nacos配置中心之事件订阅
机电设备制造企业,如何借助ERP系统做好客供料管理?
GTK实现水波纹效果
【多线程】Thread类的基本用法
Vite教程 安装
接口流量突增,如何做好性能优化?
【Gopher 学个函数】边学边练,简单为 Go 上个分
北路智控上市首日破发:公司市值59亿 募资15.6亿
ASP.NET网络版进销存管理系统源码【源码免费分享】
php一维数组合并
Moco of Mock tools use tutorial
NVM和NRM