最新JJWT 0.12.6学习

本文参考的是jjwt官方github,链接在此,本文会持续跟进jjwt的最新版本

GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and Android

简介

JJWT(Java JWT)是Java平台上相当流行的用于生成Json Web Token的库,其更新速度非常快,导致网上许多教程在如今看来都已经过时。本文将对最新的JJWT官方github页进行个人的中文解释,力求做到与官方同步。

名词解释

JWT

Java Web Token 一种通用的基于文本的信息传递格式,可用于传递任意类型的数据

JWS

JSON Web Signature 对JSON数据结构进行签名的标准,用于确保数据完整和来源的真实性

JWE

JSON Web Encryption 对JSON数据结构进行加密的标准,用于确保数据的机密性

JWS和JWE的区别在于,

  1. JWS中的数据是可以被任何人查看的,其只能够保证信息在传递过程中未被篡改;
  2. JWE则保护了数据不被未授权方查看,也能够保证信息未被篡改,因此数据涉及到隐私时应当使用JWE。

声明(Claim)

在许多场景下,开发者习惯使用JSON的负载(payload)来表示用户或主机或其他的身份概念的数据。这种情况下的负载(payload)就称为声明(Claim)。大家常用的比如说用户名/ip地址等都可以归属到声明之中。

标准声明(standard claim)

在RFC7519标准中,存在着数个标准声明(standard claim)。这些Claims并非强制性要求。JJWT为每一个标准声明都提供了方便的构造方法。例如subject()iss()等方法。标准声明表:

  • issuer: sets the iss(Issuer) Claim
  • subject: sets the sub(Subject) Claim
  • audience: sets the aud(Audience) Claim
  • expiration: sets the exp(Expiration Time) Claim
  • notBefore: sets the nbf(Not Before) Claim
  • issuedAt: sets the iat(Issued At) Claim
  • id: sets the jti(JWT ID) Claim

自定义声明(Custom Claims)

毫无疑问,jjwt也是支持自定义声明的,使用Claim()方法即可在payload中插入自己想要的键值对

快速开始

使用JJWT进行JWS生成

// key生成部分
SecretKey key = Jwts.SIG.HS256.key().build();//jws生成部分
String jws = Jwts.builder().subject("Joe").claim("name","Mike")	.claim("address","Beijing").signWith(key).compact();

key生成部分

首先SecretKey key = Jwts.SIG.HS256.key().build();

进行调试可以看到,生成的是一个SecertKey对象,包含两个属性:keyalgorithmkey随机生成的一个HMAC密钥,algorithm则说明当前使用的签名算法。需要保管好这个key,后续的jws解析也需要用到它.

jws生成部分

然后是jws生成部分上文生成的的jws是一条JWS,

.claim("name","Mike")指payload中新增一条"name":"Mike"的键值对

.claim("address","Beijing")用于指出claim()方法是可以多次重复使用的

.subject("Joe")指payload中的键sub的值为"Joe"

.signWith(key)指使用生成的key进行签名

.compact()指将其压缩为String格式

使用JJWT进行JWS解析

// jws解析
Jws<Claims> claims= Jwts.parser().verifyWith(key).build().parseSignedClaims(jws);System.out.println(claims.getPayload().get("sub"));
System.out.println(claims.getPayload().get("name"));
System.out.println(claims.getPayload().get("address"));

.verifyWith(key)指的是选用解析jws用的key,上面用过,此处调用即可

.paraseSignedClaims(jws)指选用jws这个字符串进行解析

得到一个Jws<Claims>类型的对象claims

claims.getPayload().get("sub")指从payload中获取键"sub"对应的值,另外两个亦然

未完待续....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DP讨论——桥接模式

学而时习之&#xff0c;温故而知新。 敌人出招&#xff08;使用场景&#xff09; 客户不断变化的需求是敌人&#xff0c;加个需求&#xff0c;再加个需求&#xff0c;然后内部实现不断新增类。 你出招 采用桥接模式。 一个是桥梁对象&#xff0c;另一个是业务实现类。客户通…

云计算安全需求分析与安全保护工程

云计算基本概念 云计算&#xff08;Cloud Computing&#xff09;是一种通过互联网提供计算资源和服务的技术。它允许用户按需访问和使用计算资源&#xff0c;如服务器、存储、数据库、网络、安全、分析和软件应用等&#xff0c;而无需管理底层基础设施。以下是云计算的基本概念…

快捷:通过胶水语言实现工作中测试流程并行、加速

通过胶水语言实现工作中测试流程并行、加速 通过胶水语言实现工作中测试流程并行、加速工作场景&#xff08;背景&#xff09;问题抽象&#xff08;挑战&#xff09;如何做&#xff08;行动&#xff09;获得了什么&#xff08;结果&#xff09;后记相关资源 通过胶水语言实现工…

代码随想录(day6)哈希表-求两个数组的交集

什么是红黑树&#xff0c;参考链接【数据结构】史上最好理解的红黑树讲解&#xff0c;让你彻底搞懂红黑树-CSDN博客 题目&#xff1a; 注意&#xff1a;字典用{}符合、元组用()符号、列表用[]符号 table.get(num,0)1的意思 class Solution(object):def intersection(self, n…

qt 用代码添加 QPushButton

在 Qt 中使用代码添加 QPushButton 控件是一个基本的操作。以下是一个简单的例子&#xff0c;展示了如何在 Qt 的一个继承自 QWidget 或 QMainWindow 的类中添加一个 QPushButton&#xff1a; 首先&#xff0c;你需要包含必要的头文件&#xff1a; #include <QWidget> /…

【C++】——入门基础

文章目录 命名空间输入与输出缺省参数函数重载引用内敛函数指针控制nullptr 命名空间 当C语言遇到命名冲突时&#xff0c;很难解决&#xff0c;所以C关键字namespace就是针对这种问题的。 如何使用命名空间内的成员呢&#xff1f; 加命名空间名称及限定符&#xff08; &#…

JS【详解】数据类型转换

数值 → 其他数据类型 let num 123;数值 → 字符串 结果为由该数值组成的字符串 String(num) // 结果为 123 String(NaN) // 结果为 NaNnum num.toString(); 数值 → 布尔值 0 , -0 , NAN 转为布尔值后为 false其他数值转为布尔值后为 true Boolean(num )// 取反再取反 …

husky 和 lint-staged 构建代码项目规范

目录 前言 最简单的方法 过 scripts 来解决如果检测工具多&#xff0c;需要多次处理 通过 husky(哈士奇)来解决容易遗忘的问题 1. 安装 2. husky init 3. 试一试​ lint-stadge 只 lint 改动的 1. 安装 2. 修改 package.json 配置 3. 添加 npm 脚本: 4.使用 Husky…

MAVSDK动态库与静态库及mavsdk_server程序macOS平台编译与安装

1.克隆mavsdk: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译静态库 cmake -Bbuild/default -H. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF 生成makefile 生成成功,开始编译 cmake --build build/default -j8 成功生成libmavsdk.a 开…

Java之Stream流的笔记--手写版

Stream流通过讲集合或数组转换成链状流式的结构&#xff0c;简化了集合和数组进行排序、筛选、遍历、去重、统计等操作。主要包括创建流、中间操作、终结操作。若流中无终结操作&#xff0c;则中间操作不会执行&#xff1b;流是一次性的&#xff0c;使用完就会失效&#xff0c;…

vmware workstation 虚拟机安装

vmware workstation 虚拟机安装 VMware Workstation Pro是VMware&#xff08;威睿公司&#xff09;发布的一代虚拟机软件&#xff0c;中文名称一般称 为"VMware 工作站".它的主要功能是可以给用户在单一的桌面上同时运行不同的操作系统&#xff0c;它也是可进 行开发…

Jump Point Search (JPS) 路径规划算法

Jump Point Search (JPS) 是一种优化的路径规划算法,主要用于加速A*搜索算法在网格地图上的性能。它通过减少要评估的节点数量来实现这一目标。以下是对JPS算法的详细解释: 基本思想 JPS利用了路径规划中的对称性,跳过不必要的节点,直接跳到关键节点(即“跳点”)。这些…

HDFS体系架构文件写入/下载流程

HDFS体系架构 HDFS&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;是Hadoop项目中的一个核心组件&#xff0c;旨在以高容错、高吞吐量来处理大规模数据集。它的体系架构由以下几个主要部分组成&#xff1a;Client&#xff0c;NameNo…

去中心化预言机是什么

去中心化预言机&#xff08;Decentralized Oracle&#xff09;是区块链技术中的一个组件&#xff0c;它允许智能合约访问链外&#xff08;off-chain&#xff09;的数据源。智能合约是自动执行的合约条款&#xff0c;它们在区块链上运行&#xff0c;但它们本身无法直接访问链外的…

PDF公式转Latex

文章目录 摘要数据集 UniMER介绍下载链接 LaTeX-OCRUniMERNet安装UniMER 用的数据集介绍下载链接 PDF-Extract-Kit整体介绍效果展示评测指标布局检测公式检测公式识别 使用教程环境安装参考[模型下载](models/README.md)下载所需模型权重 在Windows上运行在macOS上运行运行提取…

易备数据备份软件,全方位的防勒索数据备份方案

企业 IT 基础设施的潜在物理故障、系统故障、未及时修补的系统及网络安全漏洞、人为误操作&#xff08;误删除及误点击钓鱼邮件等&#xff09;、勒索软件的无孔不入、自然灾害的威胁等&#xff0c;就像若干不定时炸弹&#xff0c;为企业数据资产的安全埋下了巨大的引爆风险。 …

MySQL:库操作

1. 创建数据库 create database [if not exists] name [create_specification], [create_specification]... []内为可选的选项 create_specification: character set charset_name -- 指定数据库采用的字符集 -- 数据库未来存储数据 collate collation_name -- 指定数据库字符…

【数据序列倒置算法】C++实现任意容器中的数据倒置reverse

1. 算法描述&#xff1a; 【数据序列倒置算法】将容器中的数据进行倒置 2. 算法求解步骤&#xff1a; E1&#xff08;定义两个迭代器&#xff09;&#xff1a;分别指向容器的头部数据和尾部数据E2&#xff08;判断迭代器大小&#xff09;&#xff1a;如果头部迭代器小于尾部…

Hi3861 OpenHarmony嵌入式应用入门--华为 IoTDA 设备接入

华为云物联网平台&#xff08;IoT 设备接入云服务&#xff09;提供海量设备的接入和管理能力&#xff0c;可以将自己的 IoT 设备 联接到华为云&#xff0c;支撑设备数据采集上云和云端下发命令给设备进行远程控制&#xff0c;配合华为云物联网平台的服 务实现设备与设备之间的控…

vue3.0 项目h5,pc端实现扫描二维码 qrcode-reader-vue3

qrcode-reader-vue3 插件简述 qrcode-reader-vue3插件&#xff0c;允许您在不离开浏览器的情况下检测和解码二维码。 &#x1f3a5; 访问设备摄像头并持续扫描传入帧。QrcodeStream&#x1f6ae; 渲染到一个空白区域&#xff0c;您可以在其中拖放要解码的图像。QrcodeDropZon…