JWT 生成Token、解析Token的简单工具类
pom.xml导入依赖:
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>
JwtTokenManager工具类
import com.atguigu.security.entity.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/*** @author : 其然乐衣Letitbe* @date : 2022/11/12*/
public class JwtTokenManager {
/*** 用于签名的私钥*/private final String PRIVATE_KEY = "516Letitbe";
/*** 签发者*/private final String ISSUER = "Letitbe";
/*** 过期时间 1 小时*/private final long EXPIRATION_ONE_HOUR = 3600L;
/*** 过期时间 1 天*/private final long EXPIRATION_ONE_DAY = 3600 * 24;
/*** 生成Token* @param user token存储的 实体类 信息* @param expireTime token的过期时间* @return*/public String createToken(User user, long expireTime) {// 过期时间if ( expireTime == 0 ) {// 如果是0,就设置默认 1天 的过期时间expireTime = EXPIRATION_ONE_DAY;}
Map<String, Object> claims = new HashMap<>();// 自定义有效载荷部分, 将User实体类用户名和密码存储claims.put("id", user.getId());claims.put("username", user.getUsername());claims.put("password", user.getPassword());
String token = Jwts.builder()// 发证人.setIssuer(ISSUER)// 有效载荷.setClaims(claims)// 设定签发时间.setIssuedAt(new Date())// 设置有效时长.setExpiration(new Date(System.currentTimeMillis() + expireTime))// 使用HS512算法签名,PRIVATE_KEY为签名密钥.signWith(SignatureAlgorithm.HS512, PRIVATE_KEY)// compressWith() 压缩方法,当载荷过长时可对其进行压缩// 可采用jjwt实现的两种压缩方法CompressionCodecs.GZIP和CompressionCodecs.DEFLATE.compressWith(CompressionCodecs.GZIP)// 生成JWT.compact();return token;}
/*** 获取token中的User实体类* @param token* @return*/public User getUserFromToken(String token) {// 获取有效载荷Claims claims = getClaimsFromToken(token);// 解析token后,从有效载荷取出值String id = (String) claims.get("id");String username = (String) claims.get("username");String password = (String) claims.get("password");// 封装成User实体类User user = new User();user.setId( id );user.setUsername( username );user.setPassword( password );return user;}
/*** 获取有效载荷* @param token* @return*/public Claims getClaimsFromToken(String token){Claims claims = null;try {claims = Jwts.parser()//设定解密私钥.setSigningKey(PRIVATE_KEY)//传入Token.parseClaimsJws(token)//获取载荷类.getBody();}catch (Exception e){return null;}return claims;}
}
测试:
@Testpublic void czyTokenTest() {User user = new User();user.setId("1arg232t3tg231235");user.setUsername("其然乐衣");user.setPassword("2000516");String token = jwtTokenManager.createToken(user, 0L);System.out.println("生成的token: ");System.out.println(token);User userFromToken = jwtTokenManager.getUserFromToken(token);System.out.println("userFromToken:");System.out.println(userFromToken);}
JWT 生成Token、解析Token的简单工具类相关推荐
- Java生成和解析二维码工具类(简单经典)
Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...
- JWT —— 生成Token、解析Token的简单工具类
目录 1.JWT介绍 2.导入依赖 3.用户类 4.JWT工具类 背景:最近需要实现根据账号密码生成令牌码的功能,token解析后需要得到用户id.用户账号和用户类型.实现起来并不难,解决方法就是在J ...
- C# 生成校验解析token
C# 生成校验解析token 方式1 方式3 转载自 https://www.cnblogs.com/fanfan-90/p/12911203.html 重要对象 JwtSecurityToken:代 ...
- php获得帮助类数据_PHP解析xml格式数据工具类示例
本文实例讲述了PHP解析xml格式数据工具类.分享给大家供大家参考,具体如下: class ome_xml { /** * xml资源 * * @var resource * @see xml_par ...
- php解析xml数据格式,PHP解析xml格式数据工具类实例分享
本文主要介绍了PHP解析xml格式数据工具类,涉及php针对xml格式数据节点添加.获取.解析等相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 本文实例讲述了PHP解析xml格式数据工具类.分 ...
- golang利用反射写入excel的简单工具类
golang利用反射写入excel的简单工具类 工具类源码 使用方法 工具类源码 package excelimport ("errors""github.com/tea ...
- 生成sign(签名),以及校验工具类
生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...
- 一个Android下ping的简单工具类
这是一个自己写的Android下的ping的简单工具类,主要是通过ping获取到返回字符串之后截取信息得到自己想要的数据.不多说,上源码 import java.io.BufferedReader; ...
- anychart java实例_结合AnyChart做报表:一个生成AnyChart图形XML数据的工具类
今天头有点痛,所以不能详细地写了,先把代码贴上来,等身体状况稍微好一点,再继续完善. 1.(主角)一个使用XML模板生成Anychart XML数据的工具类 /** * */ package com. ...
最新文章
- aliyun 日志服务(Log Service,Log)是针对日志场景的一站式服务
- 学了python能干啥-python都可以做什么用
- 基于ECI+FaaS构建游戏战斗结算服最佳实践
- php根据指定字段去重,php二维数组根据某个字段去重
- C++vector容器-容量和大小
- 一道面试题:猫大叫了一声...
- 无语!Docker桌面不再对企业用户免费
- html - table分页断行,关于window.print网页分页换页table不断行的处理
- hive-04-Hive函数大全
- 为Laravel的artisan指令增加bash脚本
- f分布表完整图a=0.01_图 python 实现
- H5基础阶段二(表格、表单)
- 机器学习基础:吴恩达vs贪心科技AI哪个更值得你选择?
- ubuntu14.04 下基于Nginx搭建mp4/flv流媒体服务器
- 使用Tesseract训练lang文件并OCR识别集装箱号
- 59. 建立正序链表
- [导入]提高英语口语水平【网上资料整合】
- Vue + Echart 绘制地图区域标记
- 毕业设计 - 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正
- 给王凌打Call的,原来是神奇的智能湖仓