JWT快速入门

文章目录

  • 概念
    • 基本概念
    • JWT组成
  • JWT使用
    • 准备工作
    • JWT演示
  • 参考来源

概念

基本概念

JWT全称是JSON Web Tokens,它是一种通用的基于文本的消息传输格式。常作为用户进入Web系统的令牌

JWT组成

JWT由三段Base64编码组成,它们之间用.分隔,从左到右依次是JWT头部的Base64编码、JWT载荷的Base64编码、JWT签名的Base64编码
例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • JWT头部
    JWT头部经过Base64解码后是一串JSON字符串,记录签名算法类型等信息
  • JWT载荷
    JWT载荷经过Base64解码后是一串JSON字符串,记录有效信息,如用户标识等信息就可以存储到载荷中
  • JWT签名
    *JWT签名记录签名信息,签名信息是JWT头部的base64编码+JWT载荷的base64编码+key通过签名算法生成的

JWT使用

准备工作

  • 引入maven依赖
 <dependencies><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.12.5</version><scope>runtime</scope></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred --><version>0.12.5</version><scope>runtime</scope></dependency></dependencies>

JWT演示

  • HS256算法 – 通过 subject 方法设置载荷信息
    void jwtByHS256() {// 签名需要用到的keySecretKey key = Jwts.SIG.HS256.key().build();// 默认使用HS256算法进行签名,带有签名的JWT成为JWSString jws = Jwts.builder().subject("小红").signWith(key).compact();System.out.println("生成的JWS:" + jws);Claims payload = Jwts.parser().verifyWith(key).build().parseSignedClaims(jws).getPayload();System.out.println("载荷信息:" + payload);}

通过 subject 方法设置载荷信息,其实就是将载荷信息存到名为sub的属性中

  • HS384算法 – 通过 claims 方法设置载荷信息
    void jwtByHS384() {MacAlgorithm hs384 = Jwts.SIG.HS384;SecretKey key = hs384.key().build();Map<String, Object> info = new HashMap<>();info.put("name", "小北");info.put("age", 19);String jws = Jwts.builder().claims(info).signWith(key, hs384).compact();System.out.println("生成的JWS:" + jws);Claims payload = Jwts.parser().verifyWith(key).build().parseSignedClaims(jws).getPayload();System.out.println("载荷信息:" + payload);}

如果载荷信息是一个map集合,可以通过 claims 方法设置载荷信息

  • HS512算法 – 通过 content 方法设置载荷信息
    void jwtByHS512() throws JsonProcessingException {MacAlgorithm hs512 = Jwts.SIG.HS512;SecretKey key = hs512.key().build();Map<String, Object> info = new HashMap<>();info.put("name", "小林");info.put("age", 18);ObjectMapper objectMapper = new ObjectMapper();String infoStr = objectMapper.writeValueAsString(info);String jws = Jwts.builder().content(infoStr).signWith(key, hs512).compact();System.out.println("生成的JWS:" + jws);Claims payload = Jwts.parser().verifyWith(key).build().parseSignedClaims(jws).getPayload();System.out.println("载荷信息:" + payload);}

如果载荷信息是一个JSON字符串,可以通过 content 方法设置载荷信息

  • RSA算法 – 通过 claims 方法设置载荷信息
    void jwtByRSA() {SignatureAlgorithm rs512 = Jwts.SIG.RS512;KeyPair keyPair = rs512.keyPair().build();Map<String, Object> info = new HashMap<>();info.put("name", "小兰");info.put("age", 20);// 私钥加密String jws = Jwts.builder().claims(info).signWith(keyPair.getPrivate(), rs512).compact();System.out.println("生成的JWS:" + jws);Claims payload = Jwts.parser().verifyWith(keyPair.getPublic()).build().parseSignedClaims(jws).getPayload();System.out.println("载荷信息:" + payload);}

使用RS512非对称加密算法生成JWS

参考来源

  • JWT官网
  • JJWT

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

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

相关文章

洛谷 CF358B Dima and Text Messages 题解

思路 首先按照操作一和操作二得到一个没有进行操作三的字符串 s s s&#xff0c;再判断 s s s 是否是题目给定的字符串的子序列即可。 Code #include<iostream> using namespace std; signed main() {ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n,cnt…

spring 中 BeanPostProcessor 的调用时机

BeanPostProcessor 这个接口是所有后置处理器的父级接口&#xff0c;下面看看这个接口定义了哪几个方法&#xff1a; Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean; } Nullable default Obje…

做抖音小店卖什么最赚钱?精准锁定爆款的技巧!新手商家必看

哈喽~我是电商月月 做抖音小店的核心就是选品&#xff0c;商品好&#xff0c;出单的几率就多&#xff0c;那么怎么选中一个好的商品&#xff0c;就是每个商家必须细琢的一个技巧&#xff01; 为了解答这个疑惑&#xff0c;今天月月就给大家介绍几个赚钱的类别&#xff0c;并教…

临界区保护

1. 临界区的保护实际应用中可能需要的场合: 调用公共函数的代码(不可重入函数) 读取或者修改变量(全局变量) 使用硬件资源(MCU的ram、flash、uart、spi、adc等) 对时序有精准要求的操作(I2C通讯) 某些用户不想被打断的代码(比如 printf 打印),串口接收的状态、接收…

力扣每日一题 6/5

3072.将元素分配到两个数组中 II [困难] 题目&#xff1a; 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的…

用增之Google GA4F

目录 简介 Google开发文档 开发提炼(走过的坑) DDL代码环节 1、深层链接简介 2、assetlinks.json发布 3、 测试deeplink 4、完成以上操作步骤DDL的前置工作已经做好,在已安装app的情况,所有打开app的链路已经走通,最后就是Firebase 来接收ddl

semaphore | 使用web界面的ansible来批量运维 linux、windows主机

Ansible 的现代化 UI &#xff0c;可以轻松管理和运行 Ansible playbook&#xff0c;功能强大&#xff0c;操作简单&#xff0c;支持中文。 文章目录 一、系统功能说明二、系统安装2.1 直接安装2.2 docker 安装 三、系统使用3.1 建立存储库3.2 编写代码3.3 建立主机配置3.3 建立…

C++课程设计杭电题目(下)

2076.夹角有多大(题目已修改,注意读题) 题目描述 http://acm.hdu.edu.cn/showproblem.php?pid2076 Problem Description 时间过的好快&#xff0c;一个学期就这么的过去了&#xff0c;xhd在傻傻的看着表&#xff0c;出于对数据的渴望&#xff0c;突然他想知道这个表的时针…

南卡、韶音、Cleer、漫步者开放式耳机好用吗?最强开放式耳机对比揭秘!

在挑选开放式耳机时&#xff0c;个人经验和实际需求应当优先考虑&#xff0c;而非盲目追随潮流或品牌效应。投资耳机前务必慎重&#xff0c;毕竟高价值商品若无法退换&#xff0c;难免造成遗憾。为了帮助大家做出更加明智的决策&#xff0c;我亲自出资购买并测试了市面上多款主…

重生奇迹mu魔剑士

1、魔剑士低端装备-SF10(升级)亚特传说等S-S(PK)亚特奔雷魔神等。评价:优越的极品双属卓越,极其高的性价比,造福穷人玩家的装。 2、中端装备(只适合力魔剑士)-SF10S-S天魔斗神评价&#xff1a;与低级亚特等一样不过由于成本,装备PVP属性等原因,价钱稍贵点。 3、中端套装(只适合…

使用Python实现深度学习模型:序列到序列模型(Seq2Seq)

序列到序列&#xff08;Seq2Seq&#xff09;模型是一种深度学习模型&#xff0c;广泛应用于机器翻译、文本生成和对话系统等自然语言处理任务。它的核心思想是将一个序列&#xff08;如一句话&#xff09;映射到另一个序列。本文将详细介绍 Seq2Seq 模型的原理&#xff0c;并使…

49.字母异位词分组

49.字母异位词分组 /*** param {string[]} strs* return {string[][]}*/ var groupAnagrams function(strs) {const map new Object;for(let str of strs){let arr new Array(26).fill(0);for(let s of str){arr[s.charCodeAt() - a.charCodeAt()];}//数组直接作为对象的键…

【Web API DOM08】事件汇总(加载事件、滚动事件)

一&#xff1a;页面加载事件 1 概述&#xff1a; 页面加载指加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时&#xff0c;触发事件 2 load事件 监听页面所有资源加载完毕 //页面加载事件 //window 对象表示一个包含 DOM 文档的窗口 window.…

【阿里前端面试题】聊聊前端性能优化的方案,解决过什么样的性能问题?

大家好&#xff0c;我是“寻找DX3906”。每天进步一点。日积月累&#xff0c;有朝一日定会厚积薄发&#xff01; 前言&#xff1a; 前面已经和大家分享了4篇面试题&#xff1a; 《【阿里前端面试题】浏览器的加载渲染过程》 《【阿里前端面试题】客户端和服务器交互&#xff…

IO流----字节流

字节流 字节流&#xff1a;操作&#xff1a;文件字节输入输出流 &#xff1a;写入数据&#xff1a;读取数据&#xff1a;文件拷贝&#xff1a; 带缓冲区的字节输入输出流&#xff1a;拷贝文件&#xff1a;写入数据&#xff1a;读取数据: 深入 带缓冲区的字节输出流 &#xff1a…

Java线程池execute和submit的区别

前言 ThreadPoolExecutor提供了两种方法来执行异步任务&#xff0c;分别是execute和submit&#xff0c;也是日常开发中经常使用的方法&#xff0c;那么它俩有什么区别呢&#xff1f; 语义不同 首先是语义上的不同。execute声明在Executor接口&#xff0c;它接受一个Runnable…

【论文阅读】Point2RBox (CVPR’2024)

paper:https://arxiv.org/abs/2311.14758 code:https://github.com/yuyi1005/point2rbox-mmrotate

阿里云sls 采集日志安装记录

参考阿里云给的安装文档 阿里云安装Logtail组件 注意这里&#xff0c;选择地域&#xff0c;是中国地域选中国&#xff0c;海外选海外即可 按照文档继续下去 修改配置文件./alibaba-cloud-log-all/values.yaml 所有的操作完成后&#xff0c;去控制台配置 以上操作的前提是…

[WWW2024]轻量数据依赖的异常检测重训练方法LARA

开篇 近日&#xff0c;由阿里云计算平台大数据基础工程技术团队主导&#xff0c;与浙江大学合作的论文《LARA: ALight and Anti-overfitting Retraining Approach for Unsupervised Time Series Anomaly Detection 》被WWW2024收录&#xff0c;该方法解决了云服务正常模式随时…

探索AIGC降重工具:确保论文原创性的新策略

如何有效降低AIGC论文的重复率&#xff0c;也就是我们说的aigc如何降重&#xff1f;AIGC疑似度过高确实是个比较愁人的问题。如果你用AI帮忙写了论文&#xff0c;就一定要在交稿之前做一下AIGC降重的检查。一般来说&#xff0c;如果论文的AIGC超过30%&#xff0c;很可能会被判定…