JAVA生产使用登录校验模式

背景

目前我们的服务在用户登录时,会先通过登录接口进行密码校验。一旦验证成功,后端会利用UUID生成一个独特的令牌(token),并将其存储在Redis缓存中。同时,前端也会将该令牌保存在本地。在后续的接口请求中,用户必须提供这个令牌以进行身份验证。

为了深入了解和掌握项目登录模式的原理,我特意整理了常见的登录校验模式以及它们的优缺点。

登录校验模式

Session校验

基于 Session 的方案中,登录成功后,服务端将用户的身份信息存储在 Session 里,并将 Session ID 通过 Cookie 传递给客户端。后续的数据请求都会带上 Cookie,服务端根据 Cookie 中携带的 Session ID 来得辨别用户身份。

Token校验

而在基于 Token 的方案中,服务端根据用户身份信息生成 Token,发放给客户端。客户端收好 Token,并在之后的数据请求中带上 Token,服务端接到请求后校验并解析 Token 得出用户身份

JSON Web Token

JWT用来安全地表示要在双方之间传递的声明,能够通过 URL 传输。JWT的好处是无状态、轻量级,且不需要存储在服务端,因为它可以在客户端自包含所有必要的信息。

Token 格式

JWT 中的 Token 分为 3 部分,Header、Payload 与 Signature

格式为:Header.Payload.Signature

  • Header表示 Token 相关的基本元信息,如 Token 类型、加密方式(算法)等,具体如下(alg是必填的,其余都可选):
typ:Token type
cty:Content type
alg:Message authentication code algorithm
  • Payload表示 Token 携带的数据及其它 Token 元信息,规范定义的标准字段如下:
iss:Issuer,签发方
sub:Subject,Token 信息主题(Sub identifies the party that this JWT carries information about)
aud:Audience,接收方
exp:Expiration Time,过期时间
nbf:Not (valid) Before,生效时间
iat:Issued at,生成时间
jti:JWT ID,唯一标识
这些字段都是可选的,Payload 只要是合法 JSON 即可
  • Signature签名是用于验证消息在传递过程中有没有被更改,并且,对于使用私钥签名的token,它还可以验证JWT的发送方是否为它所称的发送方。
jwt优缺点

JWT(JSON Web Token)的优点包括:

  • 实现分布式单点登录:JWT使得用户身份验证变得简单直接,特别是在多个系统之间需要共享用户信息的情况下。
    减轻服务器负担:由于数据实际上保存在客户端,这样可以减少服务器端的存储压力。

  • 灵活的数据交换方式:JWT可以作为HTTP请求的一部分,便于在API中传递和验证用户身份。
    支持自定义扩展:JWT可以包含自定义的扩展字段,以满足特定的安全需求或业务逻辑。

  • 设置过期时间:JWT允许设置过期时间,从而提供了一种机制来确保安全性并防止未授权访问。

JWT的缺点包括:

  • 依赖客户端行为:由于数据保存在客户端,如果客户端不当操作,可能会带来安全隐患。

  • 难以调整过期时间:由于数据保存在客户端,对于过期时间的调整可能不够灵活,尤其是在没有统一管理客户端的情况下。

项目实践

在实际应用中我们是综合了上诉的两种模式,采用登陆时生成一个token,将token和用户绑定缓存到redis中。然后在校验时除了校验token是否有效(redis中是否含义token外),还会校验用户账户跟登陆账户是否一致。
在这里插入图片描述

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

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

相关文章

基于51 单片机的交通灯系统 源码+仿真+ppt

主要内容: 1)南北方向的绿灯、东西方向的红灯同时亮40秒。 2)南北方向的绿灯灭、黄灯亮5秒,同时东西方向的红灯继续亮。 3)南北方向的黄灯灭、左转绿灯亮,持续20秒,同时东西方向的红灯继续…

【Git版本控制 03】远程操作

目录 一、克隆远程仓库 二、推送远程仓库 三、拉取远程仓库 四、忽略特殊文件 五、命令配置别名 一、克隆远程仓库 Git是分布式版本控制系统,同⼀个Git仓库,可以分布到不同的机器上。怎么分布呢? 找⼀台电脑充当服务器的⻆⾊&#xff…

grafana+prometheus+hiveserver2(jmx_exporter+metrics)

一、hiveserver2开启metrics&#xff0c;并启动jmx_exporter 1、修改hive-site.xml文件开启metrics <property><name>hive.server2.metrics.enabled</name><value>true</value> </property> <property><name>hive.service.m…

FPGA_工程_按键控制的基于Rom数码管显示

一 信号 框图&#xff1a; 其中 key_filter seg_595_dynamic均为已有模块&#xff0c;直接例化即可使用&#xff0c;rom_8*256模块&#xff0c;调用rom ip实现。Rom_ctrl模块需要重新编写。 波形图&#xff1a; 二 代码 module key_fliter #(parameter CNT_MAX 24d9_999_99…

LEETCDE 220. 存在重复元素 III

class Solution { public:long long size;bool containsNearbyAlmostDuplicate(vector<int>& nums, int indexDiff, int valueDiff) {//桶排序unordered_map<long,long> m;sizevalueDiff1;for(int i0;i<nums.size();i){//控制数值long long idxgetID(nums[i…

实践动物姿态估计,基于最新YOLOv8全系列【n/s/m/l/x】参数模型开发构建公共场景下行人人员姿态估计分析识别系统

姿态估计&#xff08;PoseEstimation&#xff09;在我们前面的相关项目中涉及到的并不多&#xff0c;CV数据场景下主要还是以目标检测、图像识别和分割居多&#xff0c;最近正好项目中在使用YOLO系列最新的模型开发项目&#xff0c;就想着抽时间基于YOLOv8也开发构建实现姿态估…

【Linux】gdb调试与make/makefile工具

目录 导读 1. make/Makefile 1.1 引入 1.2 概念 1.3 语法规则 1.4 示例 2. Linux调试器-gdb 2.1 引入 2.2 概念 2.3 使用 导读 我们在上次讲了Linux编辑器gcc\g的使用&#xff0c;今天我们就来进一步的学习如何调试&#xff0c;以及makefile这个强大的工具。 1. mak…

STM32F1 - 工程模板_标准外设库

Project 1> 程序框架2> 文件结构3>标准外设库 - 头文件包含关系4> 移植中出现的错误4.1> 编译器版本选择4.2> 工程宏定义 N> 资料链接 1> 程序框架 根据硬件分层&#xff0c;把软件分层 2> 文件结构 为方便管理&#xff0c;将启动文件startup_stm…

零代码3D可视化快速开发平台

老子云平台 老子云3D可视化快速开发平台&#xff0c;集云压缩、云烘焙、云存储云展示于一体&#xff0c;使3D模型资源自动输出至移动端PC端、Web端&#xff0c;能在多设备、全平台进行展示和交互&#xff0c;是全球领先、自主可控的自动化3D云引擎。此技术已经在全球申请了专利…

Zoho Mail 2023:回顾过去,展望未来

当我们告别又一个非凡的一年时&#xff0c;我们想回顾一下Zoho Mail如何融合传统与创新。我们迎来了成立15周年&#xff0c;这是一个由客户、合作伙伴和我们的敬业团队共同庆祝的里程碑。与我们一起回顾这段旅程&#xff0c;探索定义Zoho Mail历史篇章的敏捷性、精确性和创新性…

分布式springboot 3项目集成mybatis官方生成器开发记录

文章目录 说明实现思路实现步骤第一步&#xff1a;创建generator子模块第二步&#xff1a;引入相关maven插件和依赖第三步&#xff1a;编写生成器配置文件第四步&#xff1a;运行查看结果 说明 该文章为作者开发学习记录&#xff0c;方便以后复习和交流主要内容为&#xff1a;…

图数据库 之 Neo4j - Browser 介绍(3)

Neo4j Browser 介绍 Neo4j Browser 中有 3 个模块&#xff0c;侧边栏&#xff0c;Cypher 编辑器与结果栏&#xff0c;在进入 Neo4j Browser 时结果栏会展示欢迎界面。 Cypher 编辑器 Cypher 是一种图形查询语言&#xff0c;用于查询和操作图形数据库。它是 Neo4j 图形数据库的…