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的简单工具类相关推荐

  1. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  2. JWT —— 生成Token、解析Token的简单工具类

    目录 1.JWT介绍 2.导入依赖 3.用户类 4.JWT工具类 背景:最近需要实现根据账号密码生成令牌码的功能,token解析后需要得到用户id.用户账号和用户类型.实现起来并不难,解决方法就是在J ...

  3. C# 生成校验解析token

    C# 生成校验解析token 方式1 方式3 转载自 https://www.cnblogs.com/fanfan-90/p/12911203.html 重要对象 JwtSecurityToken:代 ...

  4. php获得帮助类数据_PHP解析xml格式数据工具类示例

    本文实例讲述了PHP解析xml格式数据工具类.分享给大家供大家参考,具体如下: class ome_xml { /** * xml资源 * * @var resource * @see xml_par ...

  5. php解析xml数据格式,PHP解析xml格式数据工具类实例分享

    本文主要介绍了PHP解析xml格式数据工具类,涉及php针对xml格式数据节点添加.获取.解析等相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 本文实例讲述了PHP解析xml格式数据工具类.分 ...

  6. golang利用反射写入excel的简单工具类

    golang利用反射写入excel的简单工具类 工具类源码 使用方法 工具类源码 package excelimport ("errors""github.com/tea ...

  7. 生成sign(签名),以及校验工具类

    生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...

  8. 一个Android下ping的简单工具类

    这是一个自己写的Android下的ping的简单工具类,主要是通过ping获取到返回字符串之后截取信息得到自己想要的数据.不多说,上源码 import java.io.BufferedReader; ...

  9. anychart java实例_结合AnyChart做报表:一个生成AnyChart图形XML数据的工具类

    今天头有点痛,所以不能详细地写了,先把代码贴上来,等身体状况稍微好一点,再继续完善. 1.(主角)一个使用XML模板生成Anychart XML数据的工具类 /** * */ package com. ...

最新文章

  1. aliyun 日志服务(Log Service,Log)是针对日志场景的一站式服务
  2. 学了python能干啥-python都可以做什么用
  3. 基于ECI+FaaS构建游戏战斗结算服最佳实践
  4. php根据指定字段去重,php二维数组根据某个字段去重
  5. C++vector容器-容量和大小
  6. 一道面试题:猫大叫了一声...
  7. 无语!Docker桌面不再对企业用户免费
  8. html - table分页断行,关于window.print网页分页换页table不断行的处理
  9. hive-04-Hive函数大全
  10. 为Laravel的artisan指令增加bash脚本
  11. f分布表完整图a=0.01_图 python 实现
  12. H5基础阶段二(表格、表单)
  13. 机器学习基础:吴恩达vs贪心科技AI哪个更值得你选择?
  14. ubuntu14.04 下基于Nginx搭建mp4/flv流媒体服务器
  15. 使用Tesseract训练lang文件并OCR识别集装箱号
  16. 59. 建立正序链表
  17. [导入]提高英语口语水平【网上资料整合】
  18. Vue + Echart 绘制地图区域标记
  19. 毕业设计 - 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正
  20. 给王凌打Call的,原来是神奇的智能湖仓

热门文章

  1. Spring Cloud微服务系统架构的一些简单介绍和使用
  2. 班主任工作中如何融入生态文明教育?
  3. USB TYPE C接口拆解及定义、USB3.1标准说明
  4. 小组项目具体分工情况(Web.ui相关)
  5. 文件上传与下载SmartUpload
  6. element 修改分页样式_vue想改变element分页样式
  7. myEclipse 注册码 在线生成
  8. Zephyr 3.2 弃用devicetree 中node 里的label property
  9. 逆向菜鸡实战破解思科模拟器登录限制
  10. 【JC-2 DC220V冲击继电器】