JWT加密工具

JWT加密工具

2.JWT介绍

JSON Web Token(JWT),它定义了一种简洁的、自包含的协议格式,JWT可以使用HMAC算法或使用RSA的公钥/私钥对进行签名,防止被篡改。

JWT官网: https://jwt.io

JWT组成

JWT由三个部分组成:JWT头、有效载荷和签名

jwt头

{"typ":"jwt","alg":"HS256"}

在上面的代码中,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);type属性表示令牌的类型,JWT令牌统一写为JWT(需要额外设置)。

有效载荷

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。

JWT指定七个默认字段供选择(不是必须的):

iss:发行人

exp:到期时间

sub:主题

aud:用户

nbf:在此之前不可用

iat:发布时间

jti:JWT ID用于标识该JWT

除以上默认字段外,还可以自定义私有字段,比如:

{"username": "zhangsan","id": "123"}

请注意,默认情况下JWT是未加密的,任何人都可以解读其内容,因此不要构建隐私信息字段,存放保密信息,以防止信息泄露

签名Signature

签名部分是对上面两部分数据签名,通过指定的算法生成哈希,以确保数据不会被篡改。

首先,需要指定一个密码(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。

然后,使用标头中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

最终生成的jwt的字符串由三部分组成:

header(base64后的)

payload(base64后的)

Signature

例如:

eyJ0eXBlIjoiand0IiwiYWxnIjoiSFMyNTYifQ.eyJ1c2VybmFtZSI6InpoYW5nc2FuIn0.C13IdXCyBs4oALrcttCBQ5LMsl0pTNxwgwqsVW7lSPs

官网上可以查看jwt信息

img

2 生成jwt

导入jar

<!-- jwt -->
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>

jwt工具类

package com.renr.worst.common.utils;import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import java.util.Date;
import java.util.Map;/*** jwt工具类*/
public class JwtUtils {// 密钥private final static String secret = "123456789qwertyui";/*** 生成jwt** @param claims* @return*/public static String createJwt(Map<String, Object> claims) {// 签名算法,表示sha256SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;//构造jwtJwtBuilder builder = Jwts.builder()//.setHeaderParam("type","jwt") // 设置头.setClaims(claims) // 设置载荷.setExpiration(new Date(System.currentTimeMillis() + 1800000)) // 设置过期时间.signWith(signatureAlgorithm, secret); // 使用指定算法设置签名//生成jwtreturn builder.compact();}/*** 解析,如果不符合,报异常** @param jsonWebToken* @return*/public static Claims parseJWT(String jsonWebToken) {try {Claims claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(jsonWebToken).getBody();return claims;} catch (Exception ex) {throw new RuntimeException(ex.getMessage());}}
}
        return claims;} catch (Exception ex) {throw new RuntimeException(ex.getMessage());}
}

}


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

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

相关文章

AI-Talk开发板SDK

一、说明 可以在Windows、Ubuntu、macOS安装和编译SDK。此文章只介绍在Ubuntu下安装和编译SDK。 其它方式可参考聆思官方环境搭建教程。 二、环境搭建 1、安装依赖 安装git和wget软件包&#xff1a; sudo apt install --no-install-recommends git wget 如果已安装就跳…

C/C++实现蓝屏2.0

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 前…

这家AGV机器人龙头高歌猛进,半年营收27亿,国内对手们慌了吗?

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 机器人业务高歌猛进&#xff0c;海康威视创新引擎全速运转 海康威视于近日揭晓了其2024年上半年的辉煌成绩单。这份报告不仅彰显了公司整体业务的稳健增长&#xff0c;更引人注目的是…

vue-element-admin解决三级目录的KeepAlive缓存问题(详情版)

vue-element-admin解决三级目录的KeepAlive缓存问题&#xff08;详情版&#xff09; 本文章将从问题出现的角度看看KeepAlive的缓存问题&#xff0c;然后提出两种解决方法。本文章比较详细&#xff0c;如果只是看怎么解决&#xff0c;代码怎么改&#xff0c;请前往配置版。 一…

uView的u-notice-bar组件横向滚动不生效问题解决

uView的u-notice-bar组件横向滚动不生效问题解决 此问题导致我换了vant组件的 notice-bar&#xff0c;一度以为是该组件存在bug。uniapp中有vant组件打包小程序又是一个问题&#xff0c;于是乎不得不回来继续折腾uView的u-notice-bar组件&#xff0c;偶然发现css属性animation-…

【Cypress】截图插件

在视觉回归测试中&#xff0c;基准截图和测试运行中的截图是指两个不同时间点或条件下捕捉到的页面截图&#xff0c;用于比较和检测视觉差异。 1. 基准截图 (Baseline Image): - 这是你在项目中首次运行视觉回归测试时保存的截图&#xff0c;它代表了页面在最初设定的理想状…

英语写作中“使……能够”allow enable的用法及替代表达

现在英语写作中allow enable 使用比较多&#xff0c;为了丰富表达&#xff0c;本文给出allow enable 例句的同时给出替代表达。 例句1&#xff1a; Mobile phones allow/enable people to keep contact with others anywhere anytime.&#xff08;手机使人们任何地点任何时间…

26-vector arraylist和linkedlist的区别

‌Vector, ArrayList, 和 LinkedList 是Java中常见的三种列表实现&#xff0c;它们各自具有不同的特点和适用场景。‌ ‌同步性与线程安全‌&#xff1a; ‌Vector‌ 是同步的&#xff0c;即线程安全的&#xff0c;它的所有方法都是同步的&#xff0c;可以由两个线程安全地访问…

nginx简介及功能介绍

目录 niginx与apache niginx特点 nginx模块介绍 nginx的编译安装 nginx的平滑升级及版本回滚 niginx的常用参数 nginx独立文件编写 location匹配用法 自定义日志 文件检测 nginx中的长链接管理 nginx下载服务器设置 nginx的状态页面 nginx的数据压缩功能 nginx的…

Python3 集成 gRPC 服务

Python3 集成 gRPC 服务及 protocol buffers 1、gRPC是什么&#xff1f;1.1、gRPC大致请求流程1.2、gRPC特性1.3、gRPC优势和劣势1.3.1、优势1.3.2、劣势 2、构建一个python3的gRPC服务2.1、虚拟环境搭建(可选择自动安装pip)2.1、引入相关依赖2.2、创建项目2.2.1、项目整体结构…

springboot 整合spring-boot-starter-data-elasticsearch

依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> 配置 spring:elasticsearch:rest:uris: "http://localhost:9200" # Elastics…

集团数字化转型方(五)

集团数字化转型方案通过全面整合人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;等前沿技术&#xff0c;构建了一个高度智能化的业务平台&#xff0c;从而实现业务流程的自动化、数据驱动的决策支持、精准的市场预测、以及个性化的…

快速带你玩转高性能web服务器后续

目录 一、Nginx 高级配置 1.1 Nginx 状态页 1.2 Nginx 压缩功能 1.3 Nginx的版本隐藏 1.4 Nginx 变量使用 1.4.1 内置变量 二、 Nginx Rewrite 相关功能 2.1 ngx_http_rewrite_module 模块指令 2.1.1 if 指令 2.1.2 set 指令 2.1.3 break 指令 2.1.4 return 指令 2…

【卡码网C++基础课 1.A+B问题1】

文章目录 题目描述与分析一、C函数基础二、输入输出流三、变量四、写入数据五、输出数据六、尝试第一次提交七、循环输入输出八、延伸 题目描述与分析 题目描述&#xff1a; 你的任务是计算ab。 输入描述&#xff1a; 输入包含一系列的a和b对&#xff0c;通过空格隔开。一对a…

【UE5】基于摄像机距离逐渐剔除角色

效果 步骤 1. 新建一个工程&#xff0c;在内容浏览器中添加第三人称游戏内容包 2. 找到第三人称角色的材质实例“MI_Quinn_01”并打开 找到材质实例的父项材质“M_Mannequin” 打开材质“M_Mannequin” 在材质图表中添加如下节点 此时运行效果如文章开头所示。 参考视频&#…

【vue教程】七. Vue 的动画和过渡

文章目录 往期列表回顾本章涵盖知识点Vue 的内置动画系统基本的进入和离开过渡列表过渡 CSS 过渡CSS 过渡基础Vue 中的 CSS 过渡 JavaScript 动画使用 JavaScript 钩子 第三方动画库的使用集成 Animate.css 实例演示创建一个简单的动画应用 结语 往期列表 【vue教程】一. 环境…

RabbitMQ如何保证消息不丢失

RabbitMQ消息丢失的三种情况 第一种&#xff1a;生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题啥的&#xff0c;都有可能。 第二种&#xff1a;RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了。 第三种…

《深入浅出WPF》读书笔记.4名称空间详解

《深入浅出WPF》读书笔记.4名称空间详解 背景 主要讲明名称空间概念&#xff0c;可以理解为命名空间的引用。 xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" &#x1f446;如x可以理解为一些列命名空间的引用。 不一一列举&#xff0c;只讲几个特殊的…

Java基础——注释

在开发中注释是必不可少的&#xff0c;帮助我们更好的标记阅读代码&#xff0c;下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释&#xff0c;只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/&#xff0c;注释多行代…

2024最新急速暴走小米运动自动刷步卡密版PHP源码

2023最新发布的急速暴走小米运动自动刷步卡密版PHP源码。该源码使用PHPTP6layui-Mini开发&#xff0c;旨在实现小米运动自动刷步功能。该程序支持通过微信修改步数&#xff0c;并采用卡密认证方式&#xff0c;用户只需提交提供的卡密&#xff0c;即可每日自助修改步数。 需要注…