当前位置: 首页 > news >正文

JWT工具【工具类】

一、JWT

JSON Web Token (JWT)是一个开放标准(RFC 7519),定义了一种紧凑且自包含的方式,以JSON对象的形式在各方之间安全地传输信息。这种信息可以被验证和信任,因为它是数字签名的。具体来说,JWT是一种用于在不同系统间身份验证的json对象,它主要由三部分组成:header(头部)、payload(载荷)和signature(签名)。
JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。由于其规范化的JSON结构,使得JWT应用非常广泛,是目前最流行的跨域认证解决方案之一。

二、案例

案例还是以工具类为主,方便各位拿去直接可以使用:
引入依赖:

        <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.4.0</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency>

工具类代码:

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** JWT工具类*/
public class JwtUtils {/*** 签名密钥*/private static final String signKey = "Jerryean";/*** 有效时间*/private static final Long expire = 43200000L;/*** 生成JWT令牌** @param claims JWT第二部分负载 payload 中存储的内容*/public static String generateJwt(Map<String, Object> claims) {return Jwts.builder().addClaims(claims)//自定义信息(有效载荷).signWith(SignatureAlgorithm.HS256, signKey)//签名算法(头部).setExpiration(new Date(System.currentTimeMillis() + expire))//过期时间.compact();}/*** 解析JWT令牌** @param jwt JWT令牌* @return JWT第二部分负载 payload 中存储的内容*/public static Claims parseJWT(String jwt) {return Jwts.parser().setSigningKey(signKey)//指定签名密钥.parseClaimsJws(jwt)//指定令牌Token.getBody();}public static void main(String[] args) {Map<String, Object> map = new HashMap<>();map.put("orgId", "1");map.put("username", "admin");String jwt_token = JwtUtils.generateJwt(map);System.out.println(jwt_token);Claims claims = JwtUtils.parseJWT(jwt_token);System.out.println(claims);}
}

测试结果:
在这里插入图片描述

相关文章:

  • cdh zookeeper报错 Canary 测试建立与 ZooKeeper 服务的连接或者客户端会话失败。
  • C++智能指针举例
  • LabVIEW与Python的比较及联合开发
  • 编程机器人的参数表怎么看
  • 【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题
  • 【数学】什么是方法矩估计?和最大似然估计是什么关系?
  • 用C语言实现扫雷
  • 基于python实现视频和音频长度对齐合成并添加字幕
  • ubuntu gitlab 部署 私有git库
  • 银河麒麟系统安装
  • 为什么javascript中数组可以存储不同类型的元素,而大多编程语言数组必须存储相同的元素?
  • LeetCode-day11-2813. 子序列最大优雅度
  • 每日一题——Python实现PAT乙级1012 数字分类(举一反三+思想解读+逐步优化)五千字好文
  • 基于YOLO检测算法(单检测器网络+多视频输入)设计与实现
  • pdf格式转成jpg图片,pdf格式如何转jpg
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • export和import的用法总结
  • gitlab-ci配置详解(一)
  • IDEA 插件开发入门教程
  • JS数组方法汇总
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PAT A1050
  • SQLServer之创建数据库快照
  • Vim Clutch | 面向脚踏板编程……
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 不上全站https的网站你们就等着被恶心死吧
  • 代理模式
  • 使用Gradle第一次构建Java程序
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 走向全栈之MongoDB的使用
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ### RabbitMQ五种工作模式:
  • #define用法
  • #include
  • #WEB前端(HTML属性)
  • (2)STL算法之元素计数
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • .bashrc在哪里,alias妙用
  • .NET : 在VS2008中计算代码度量值
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net反编译工具
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • @angular/cli项目构建--http(2)
  • @Controller和@RestController的区别?
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [AIGC] 广度优先搜索(Breadth-First Search,BFS)详解