JWT入门

JWT与TOKEN

JWT(JSON Web Token)是一种基于 JSON 格式的轻量级安全令牌,通常用于在网络应用间安全地传递信息。而“token”一词则是一个更广泛的术语,用来指代任何形式的令牌,用于在计算机系统中进行身份验证或授权。JWT 是 token 的一种具体实现方式,提供了一种基于 JSON 结构的令牌标准,用于在客户端和服务器之间传递信息,并在许多网络应用中广泛使用。

1.简介

Json Web Token,通过数字签名的方式,以JSON对象为载体,不需中间服务器验证的情况下,允许在源和接收方之间可靠传输,确保信息的完整性和真实性

2.用处

授权认证,一旦用户登录,后续每个请求都包含有JWT,系统在每次处理请求之前,都先进行JWT安全校验。

3.组成

由3部分组成,用"."拼接

三部分分别是:

  • Header

    • token类型

    • 加密算法名称

  • Payload 载荷,存放有效信息

    • 标准中注册的声明 ---信息安全的分类

    • 公共的声明

    • 私有的声明

  • Signature 签名

    • 将加密后的Header和加密后的Payload用点拼接,再将结果通过header中声明的加密算法进行加密

例子

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

package com.jwt;

import com.sun.javafx.binding.StringFormatter;
import io.jsonwebtoken.*;

import java.util.Date;
import java.util.UUID;

public class Test {

    // 24h
    private long time = 1000 * 60 * 60 * 24;
    private String signature = "admin";
    /**
     * 测试JWT令牌的生成和配置。
     * 使用JJWT库创建一个包含特定头部、载荷和签名的JWT令牌。
     * 头部配置了令牌的类型和算法。
     * 载荷包含了用户名、密码和主题等信息。
     * 设置了令牌的过期时间和唯一标识。
     * 使用HS256算法对令牌进行签名以确保完整性。
     */
    @org.junit.Test
    public void jwtTest() {
        // 创建JWT令牌构建器
        JwtBuilder jwtBuilder = Jwts.builder();
        // 构建并配置JWT令牌
        String jwtToken = jwtBuilder
                // 设置头部参数,定义令牌类型和算法
                // header
                .setHeaderParam("typ", "JWT")
                .setHeaderParam("alg", "HS256")
                // 设置载荷信息,包含用户名和密码
                // payload
                .claim("username", "admin")
                .claim("password", "123456")
                // 设置主题
                .setSubject("admin-Test")
                // 设置令牌过期时间
                .setExpiration(new Date(System.currentTimeMillis() + time))
                // 设置令牌的唯一标识
                .setId(UUID.randomUUID().toString())
                // 设置令牌的发行时间
                .setIssuedAt(new Date())
                // 使用HS256算法和签名密钥对令牌进行签名
                // signature
                .signWith(SignatureAlgorithm.HS256, signature)
                // 将令牌紧凑化为最终的字符串表示形式
                .compact();
        System.out.println(jwtToken);
    }
    /**
     * 解析JWT令牌。
     * 该方法演示了如何使用JJWT库解析一个JWT令牌,并从中提取出声明信息。
     * JWT令牌被设计为一种安全的数据传输方式,其中包含了用户信息或其他需要传递给服务端的信息。
     * 在这个例子中,我们解析令牌以获取用户名、密码、令牌ID、主题和过期时间等信息。
     */
    @org.junit.Test
    public void parse(){
        // 定义一个JWT令牌字符串
        String jwtToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiIxMjM0NTYiLCJzdWIiOiJhZG1pbi1UZXN0IiwiZXhwIjoxNzE5ODM1Mzc4LCJqdGkiOiJiOGI2M2QxYy1iODhiLTQ4MDAtOWEyYi0yOTVkY2Q3NDNjMTQiLCJpYXQiOjE3MTk3NDg5Nzh9.Espy5I1IjwuPmnkHx-6TTie_VUP2zLDnasxfNDilclI";

        // 创建JWT解析器
        JwtParser jwtParser = Jwts.parser();

        // 设置解析器的签名密钥,并解析JWT令牌为Jws<Claims>对象
        Jws<Claims> claimsJws = jwtParser.setSigningKey(signature)
                .parseClaimsJws(jwtToken);

        // 提取声明信息
        Claims claims = claimsJws.getBody();

        // 打印提取的声明信息:用户名、密码、令牌ID、主题和过期时间
        System.out.println(claims.get("username"));
        System.out.println(claims.get("password"));
        System.out.println(claims.getId());
        System.out.println(claims.getSubject());
        System.out.println(claims.getExpiration());
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云原生技术架构详解

云原生技术最全详解(图文全面总结) 容器技术 容器技术&#xff1a;是将应用程序、及其所有依赖项&#xff0c;打包到一个独立的、可移植的容器中。 如下图所示: 容器技术的实现&#xff0c;最典型的就是以Docker为代表的。 如下图所示&#xff1a; 主要解决&#xff1a; 1、…

【ROS中Cjson文件的作用】

在ROS (Robot Operating System) 中&#xff0c;.json 文件通常用于存储配置信息、数据序列化或者在某些情况下用于网络通信和数据交换。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于…

UE4_材质_使用彩色半透明阴影

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿大美临沂生活越来越好&#xff01; 本教程将介绍如何配置虚幻引擎来投射彩色半透明阴影。 此功能在许多应用中都很有用&#xff0c;常见例子就是透过彩色玻璃窗的彩色光。 一、半透明阴影颜色 阴影在穿过半…

【Python机器学习】模型评估与改进——带交叉验证的网格搜索

虽然将数据划分为训练集、验证集、测试集的方法是可行的&#xff0c;也相对常用&#xff0c;但这种方法对数据的划分相当敏感&#xff0c;为了得到对泛化性能的更好估计&#xff0c;我们可以使用交叉验证来评估每种参数组合的性能&#xff0c;而不是仅将数据单次划分为训练集与…

模拟退火算法2—优缺点

模拟退火算法优点 1、以一定的概率接受恶化解 模拟退火算法(SA)在搜索策略上与传统的随机搜索方法不同,它不仅引入了适当的随机因素,而且还引入了物理系统退火过程的自然机理。这种自然机理的引入使模拟退火算法在迭代过程中不仅接受使目标函数变“好”的试探点,而且还能以一…

Hadoop权威指南-读书笔记-02-关于MapReduce

Hadoop权威指南-读书笔记 记录一下读这本书的时候觉得有意思或者重要的点~ 还是老样子~挑重点记录哈&#x1f601;有兴趣的小伙伴可以去看看原著&#x1f60a; 第二章 关于MapReduce MapReduce是一种可用于数据处理的编程模型。 MapReduce程序本质上是并行运行的&#xff0c…

行业模板|DataEase旅游行业大屏模板推荐

DataEase开源数据可视化分析工具于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

网络安全--计算机网络安全概述

文章目录 网络信息系统安全的目标网络安全的分支举例P2DR模型信息安全模型访问控制的分类多级安全模型 网络信息系统安全的目标 保密性 保证用户信息的保密性&#xff0c;对于非公开的信息&#xff0c;用户无法访问并且无法进行非授权访问&#xff0c;举例子就是&#xff1a;防…

Andriod安装termux并换源

问题汇总 Error: The repository ‘https://mirrors.tuna.tsinghua.edu.cn/termux/termux-package-24 stable Release’ does not have a Release file. 更换源&#xff08;这里使用的是清华大学源&#xff09; 打开文件 nano $PREFIX/etc/apt/sources.list手动修改 deb htt…

Powershell 获取电脑保存的所有wifi密码

一. 知识点 netsh wlan show profiles 用于显示计算机上已保存的无线网络配置文件 Measure-Object 用于统计数量 [PSCustomObject]{ } 用于创建Powershell对象 [math]::Round 四舍五入 Write-Progress 显示进度条 二. 代码 只能获取中文Windows操作系统的wifi密码如果想获取…

ETCD概述--使用/特性/架构/原理

ETCD概述 ETCD是一个高度一致的分布式键值存储, 它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据(高可用, 强一致性)​全局的配置服务中心. 本文将介绍其特性、相关操作和常见的应用场景. 如果想了解更多, 请查阅我的技术博客: https://dingyuqi.com 特性 …

红酒与文学:探索文字背后的酒香

在文学的海洋中&#xff0c;红酒如同一股不同的香风&#xff0c;轻轻拂过书页&#xff0c;为文字的世界增添了一抹诱人的色彩。今天&#xff0c;就让我们一起踏上这段奇妙的旅程&#xff0c;探索红酒与文学之间的奇妙联系&#xff0c;感受文字背后的酒香&#xff0c;特别是以雷…

第11章 规划过程组(二)(11.8排列活动顺序)

第11章 规划过程组&#xff08;二&#xff09;11.8排列活动顺序&#xff0c;在第三版教材第388~389页&#xff1b;文字图片音频方式 第一个知识点&#xff1a;主要工具与技术&#xff08;重要知识点&#xff09; 1、紧前关系绘图法&#xff08;PDM&#xff09;或前导图法&#…

宝塔Linux面板配置环境 + 创建站点

一、安装 &#xff08;1&#xff09;进入宝塔官网 https://www.bt.cn/new/index.html &#xff08;2&#xff09;点击“ 立即免费安装 ”&#xff0c;选择 Centos安装脚本 &#xff08;3&#xff09;进入 ssh 输入以下命令安装宝塔 yum install -y wget && wget -O …

【Docker安装】OpenEuler系统下部署Docker环境

【Docker安装】OpenEuler系统下部署Docker环境 前言一、本次实践介绍1.1 本次实践规划1.2 本次实践简介二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本2.3 检查yum仓库三、卸载Docker四、部署Docker环境4.1 配置yum仓库4.2 检查可用yum仓库4.3 安装Docker4.4 检查Docke…

Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire

一、前言 线上项目往往依赖非常多的具备特定能力的资源&#xff0c;如&#xff1a;DB、MQ、各种中间件&#xff0c;以及随着项目业务的复杂化&#xff0c;单一项目内&#xff0c;业务模块也逐渐增多&#xff0c;如何高效、整洁管理各种资源十分重要。 本文从“术”层面&#…

Linux高并发服务器开发(十一)UDP通信和本地socket通信

文章目录 1 TCP和UDP的区别2 UDPAPI流程服务端流程客户端流程 代码服务端客户端 3 本地socket通信服务端客户端客户端代码 1 TCP和UDP的区别 2 UDP API 流程 服务端流程 客户端流程 代码 服务端 #include<sys/socket.h> #include<stdio.h> #include<arpa/in…

图像增强方法汇总OpenCV+python实现【第一部分:常用图像增强方法】

图像增强方法汇总OpenCVpython实现【第一部分】 前言常用的图像增强方法1. 旋转&#xff08;Rotation&#xff09;&#xff1a;2. 平移&#xff08;Translation&#xff09;&#xff1a;3. 缩放&#xff08;Scaling&#xff09;&#xff1a;4. 剪切变换&#xff08;Shear Trans…

Mac本地部署大模型-单机运行

前些天在一台linux服务器&#xff08;8核&#xff0c;32G内存&#xff0c;无显卡&#xff09;使用ollama运行阿里通义千问Qwen1.5和Qwen2.0低参数版本大模型&#xff0c;Qwen2-1.5B可以运行&#xff0c;但是推理速度有些慢。 一直还没有尝试在macbook上运行测试大模型&#xf…

bug,属性注入时为null

因为在使用拦截器时使用的是new的这个类放容器的 解决方法&#xff1a; 使用有参构造器&#xff0c;在new对象时传入值