token的使用

news/2024/5/21 9:31:36/文章来源:https://blog.csdn.net/weixin_50769390/article/details/127970458

一:什么是token及token的作用?

1.什么是token?

Token是首次登录时,由服务器下发,作为客户端进行请求时的一个令牌。当请求后台方法时,用于身份验证

当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码

2.Token的作用?

Token完全由应用程序进行管理,所以它可以避开同源策略
Token可以避免CSRF(跨站请求访问)攻击 

 简单的说:后端生成token 会有一个签名(基本上后端自己设计)  避免外部攻击!

Token可以是无状态的,可以在多个服务器之间共享
使用Token减轻服务器的压力,减少频繁的查询数据库

3.Token的身份认证过程!

1.用户通过用户名和密码发送请求

2.程序进行验证

3.程序会返回一个字符串(就是token)给客户端

4.客户端进行储存token,并且用于每一次请求

5.服务器验证并且返回想要的数据

现在知道token是干什么的了,那么怎么使用token呢?

 二:JWT介绍

1.什么是JWT 

JWT,全称为JSON Web token,是用于对应用程序上的用户进行身份验证的标记。也就是说,使用JWT的应用程序不再需要保存有关其用户的cookie或session数据

* 在身份验证过程中, 当用户使用其凭据成功登录时,将返回JWT,客户端会将其保存到本地存储中,而后每次请求都会携带

* JWT本质上就是一个经过加密处理与校验处理的字符串,

它由三部分组成:头信息.有效载荷.签名
    头信息: 一般由两部分组成,Token类型和散列算法(HMAC、RSASSA、RSASSA-PSS等)

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


    有效载荷: 一般里面可以存储自定义的实体的信息

payload(载荷)信息存放的是Claims声明信息。载荷其实就是自定义的数据,一般存储用户Id,过期时间等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。


    签名: 用于保证消息在传输过程中不会被篡改

signature(签名)需要使用编码后的header和payload以及一个秘钥,使用header中指定签名算法进行签名。

 2.JWT的流程

 3.项目中使用JWT

1.依赖

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

 2.封装工具类 创建和解析token(调用)

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;import java.util.Map;public class JwtUtil {// 创建tokenpublic static String createToken(Long id,String secret) {Map<String, Object> map = new HashMap<String, Object>();map.put("id", id);return Jwts.builder().setClaims(map) //设置响应数据体.signWith(SignatureAlgorithm.HS256, secret) //设置加密方法和加密盐.compact();}// 解析tokenpublic static Map parseToken(String token,String secret) {return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();}}

最后token 相当于这玩意:

 "token": "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MTI4fQ.BUsv0fc8qI2Yx02vEDLUR1JSc-FV5Sr8NuqsXIKPiNg"

 

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

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

相关文章

【SpringBoot】SpringBoot+SpringSecurity+CAS实现单点登录

文章目录一.CAS的概述1.SSO2.CAS3.概念二.CAS的流程三.CAS服务端部署1.下载地址2.源码打包3.部署运行4. java.io.FileNotFoundException: \etc\cas\thekeystore (系统找不到指定的文件。)四.CAS的定制1.定制数据源2.兼容 HTTP3.定制登录页五.SpringBoot集成CAS1.工程创建2.导入…

【OpenCV 例程 300篇】248. 特征描述之HOG描述符

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】248. 特征描述之HOG描述符 1. 方向梯度直方图 方向梯度直方图&#xff08;Histogram of Oriented Gradient, HOG&#xff09;使用梯度方向的分布作为特征来构造描述符&#xff0c;应用非常广泛。 梯…

十万部冷知识:“澳大利亚”为什么属于亚洲球队?

在2022年卡塔尔世界杯上&#xff0c;总共有6支球队入围&#xff0c;他们分别是日本队&#xff0c;韩国队&#xff0c;沙特队&#xff0c;伊朗队&#xff0c;澳大利亚队&#xff0c;还有就是东道主卡塔尔队。但是我们知道&#xff0c;澳大利亚&#xff0c;并不是亚洲的国家&…

前端面试题(JS部分)

目录一&#xff0c; 数据类型1&#xff0c;什么是引用类型&#xff0c;值类型&#xff1f;2&#xff0c;哪些值类型3&#xff0c;哪些引用类型4&#xff0c;判断数据类型5&#xff0c;typeof判断6&#xff0c;instanceof7&#xff0c;construtor二&#xff0c;浅拷贝 / 深拷贝1…

在阿里云 ACK 上部署 EMQX MQTT 服务器集群

云进入以「应用为中心」的云原生阶段&#xff0c;Operator 模式的出现&#xff0c;则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范。通过将运维知识固化成高级语言 Go/Java 代码&#xff0c;使得运维知识可以像普通软件一样交付&#xff0c;并能支…

Jmeter的使用说明

一、安装Jmeter工具 链接&#xff1a;https://pan.baidu.com/s/1ZYc15eq9DO-r0ChKHxMXlg?pwdckcd 提取码&#xff1a;ckcd --来自百度网盘超级会员V5的分享二、Jmeter的常用元器件说明 jmeter八大元件件&#xff1a;取样器&#xff0c;前置处理器&#xff0c;后置处理器&a…

MySQL的高阶学习:索引、B+树

1.索引 索引是一种数据结构&#xff0c;如果没有索引&#xff0c;查找一个数据就需要从第一页开始全局检索直至找到需要的数据&#xff0c;有了索引可以先在目录中根据拼音查找到该数据所在的页数&#xff0c;因此通过索引可以大大减少了查询时间。 索引有两种存储类型&#xf…

汽车安全气囊设计?Abaqus/Part特殊建模方法-附案例step-by-step教学

作者 | 邓怡超 Abaqus/Part基于特征的建模功能可以说非常齐全&#xff0c;基本能够满足一般的分析要求&#xff0c;更复杂的模型则可以通过与专业三维建模软件之间的接口来导入&#xff0c;今天要说的是部件的另外一种建模方法。 有一种类型的分析&#xff0c;部件自身的初始…

Linux基础8 - 网络配置

Linux基础8 - 网络配置 一、网络连接的三种方式 Vmware为我们提供了三种网络工作模式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09;。 1、桥接模式…

zabbix日志监控:操作系统、业务系统、文件大小、多行日志

zabbix日志监控&#xff1a;操作系统、业务系统、文件大小、多行日志 目录1 监控操作系统日志2 监控业务系统日志具体要求&#xff1a;分析&#xff1a;操作&#xff1a;3 监控日志文件大小&#xff08;1&#xff09;在被管主机当中安装agent&#xff08;2&#xff09;在以下za…

Activity、Fragment之间的传值

1、Activity和Activity之间传值 1、使用Intent 2、使用Intent结合Bundle IntentBundle 3、传自定义对象实现&#xff08;实现Serialzable接口&#xff0c;性能较差&#xff0c;系统自动处理&#xff09; 传自定义对象 4、传自定义对象&#xff08;实现Parcelable,性能较好…

操作系统复习【面试】

操作系统复习【面试】前言推荐操作系统复习第一章 操作系统引论 11.3 操作系统的基本特性 141.3.1 并发1.3.2 共享1.3.3 虚拟1.3.4 异步1.4 操作系统的主要功能 171.4.1 处理机管理功能1.4.2 存储器管理功能1.4.3 设备管理功能1.4.4 文件管理功能1.4.5 操作系统和用户之间的接口…

MySQL Hash Join前世今生

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;nw MySQL Hash Join前世今生 因工作需要&#xff0c;对MySQL Hash Join的内部实现做了一些探索和实践&#x…

内部类_Java

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 文章目录 目录 文章目录 一、内部类的概念 二、内部类的分类 1.静态内部类&#xff08;被static修饰&#xff09; 2.非静态内部类 3.局部内部类 4.匿名内部类 一、内部类的概念 当一个事物…

【微服务解耦之事件启动】Spring Boot 解耦之事件驱动

一、前言 简介&#xff1a; 在项目实际开发过程中&#xff0c;我们有很多这样的业务场景&#xff1a;一个事务中处理完一个业务逻辑后需要跟着处理另外一个业务逻辑&#xff0c;伪码大致如下&#xff1a; Service public class ProductServiceImpl {...public void saveProdu…

ggplot2 | 世界杯赛程的可视化就交给我吧!~

11. 写在前面 昨天卡塔尔&#x1f1f6;&#x1f1e6;输了比赛真是让人大跌眼镜啊&#x1f631;&#xff0c;打破了世界杯东道主必胜的神律&#xff0c;也不知道王子们是怎么想的。&#x1f923; 今天是英格兰&#x1f3f4;&#xe0067;&#xe0062;&#xe0065;&#xe006e…

WebRTC Pacer

目录 一. 前言 二. WebRTC Pacer 1. 数据包传入Pacer模块的队列 2. Pacer模块取出队列的包发送 &#xff08;1&#xff09;什么时候取出数据包发送 &#xff08;2&#xff09;每次发送多少数据量 &#xff08;3&#xff09;避免引入较大延时的处理方法 一. 前言 实时音视…

Android Studio实现一个点餐系统

点餐系统作业要求效果登录注册欢迎页用户管理菜品种类管理菜品管理订单查询点餐后厨助手源码导读手把手编写注册、用户管理板块新建实体类User新建User服务新建注册活动用户管理作业要求 功能&#xff1a; 1&#xff0e;数据管理 菜品类别&#xff1a;凉菜&#xff1b;热菜&…

在裸机上输出Hello,world! [rCore-lab1]

引言 非常简单的“Hello, world”应用程序,实际上有着多层硬件和软件工具和支撑环境隐藏在它背后&#xff0c;才让我们不必付出那么多努力就能够创造出功能强大的应用程序。生成应用程序二进制执行代码所依赖的是以 编译器 为主的开发环境&#xff1b;运行应用程序执行码所依赖…

[附源码]计算机毕业设计JAVA基于web旅游网站的设计与实现

[附源码]计算机毕业设计JAVA基于web旅游网站的设计与实现 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …