JAVA生产使用登录校验模式

news2024/9/24 15:25:41

背景

目前我们的服务在用户登录时,会先通过登录接口进行密码校验。一旦验证成功,后端会利用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.coloradmin.cn/o/1439340.html

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

相关文章

常用对象和常用成员函数

常量对象与常量成员函数来防止修改对象,实现最低权限原则。 在Obj被定义为常量对象的情况下,下面这条语句是错误的。 错误的原因是常量对象一旦初始化后,其值就再也不能改变。因此,不能通过常量对象调用普通成员函数,因…

海外云手机的核心优势

随着5G时代的到来,云计算产业正处于高速发展的时期,为海外云手机的问世创造了一个可信任的背景。在资源有限且需求不断增加的时代,将硬件设备集中在云端,降低个人用户的硬件消耗,同时提升性能,这一点单单就…

得物自研API网关实践之路

一、业务背景 老网关使用 Spring Cloud Gateway (下称SCG)技术框架搭建,SCG基于webflux 编程范式,webflux是一种响应式编程理念,响应式编程对于提升系统吞吐率和性能有很大帮助; webflux 的底层构建在netty之上性能表…

广度优先搜索(BFS)

力扣刷题之旅:进阶篇(二) 继续我的力扣刷题之旅,我在进阶篇的第一部分中深入探索了BFS(广度优先搜索)算法,并感受到了它在图形搜索中的强大威力。现在,我进入了进阶篇的第二部分&am…

百卓Smart管理平台 uploadfile.php 文件上传漏洞复现(CVE-2024-0939)

0x01 产品简介 百卓Smart管理平台是北京百卓网络技术有限公司(以下简称百卓网络)的一款安全网关产品,是一家致力于构建下一代安全互联网的高科技企业。 0x02 漏洞概述 百卓Smart管理平台 uploadfile.php 接口存在任意文件上传漏洞。未经身份验证的攻击者可以利用此漏洞上传…

单片机无线发射的原理剖析

目录 一、EV1527编码格式 二、OOK&ASK的简单了解 三、433MHZ 四、单片机的地址ID 五、基于STC15W104单片机实现无线通信 无线发射主要运用到了三个知识点:EV1527格式;OOk;433MHZ。下面我们来分别阐述: EV1527是数据的编…

Stable Diffusion 模型下载:Samaritan 3d Cartoon SDXL(撒玛利亚人 3d 卡通 SDXL)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 由“PromptSharingSamaritan”创作的撒玛利亚人 3d 卡通类型的大模型,该模型的基础模型为 SDXL 1.0。 条目内容类型大模型基础模型SDXL 1.0来源CIVITA…

IDEA创建Java类时自动添加注释(作者、年份、月份)

目录 IDEA创建Java类时自动添加注释(作者、年份、月份)如图: IDEA创建Java类时自动添加注释(作者、年份、月份) 简单记录下,IDEA创建Java类时自动添加注释(作者、年份、月份)&#…

@PostMapping/ @GetMapping等请求格式

目录 1.只传一个参数的 第一种 第二种 第三种:表单 2.传整个对象的 2.1修改实体类就是传整个对象过来 2.2新增实体类就是传整个对象过来新增 1.只传一个参数的 第一种 PostMapping("/add/{newsId}")public Result addOne(PathVariable Integer newsId) {}pos…

Spring + Tomcat项目中nacos配置中文乱码问题解决

实际工作的时候碰到了nacos中文乱码的问题,一顿排查最终还是调源码解决了。下面为具体的源码流程,有碰到的可以参考下。 对于nacos配置来说,初始主要源码就在NacosConfigService类中。里面有初始化获取配置content以及设置对应监听器的操作。…

windows中的apache改成手动启动的操作步骤

使用cmd解决安装之后开机自启的问题 services.msc 0. 这个命令是打开本地服务找到apache的服务名称 2 .通过服务名称去查看服务的状态 sc query apacheapache3.附加上关掉和启动的命令(换成是你的服务名称) 关掉命令 sc stop apacheapache启动命令 …

金融行业专题|证券超融合架构转型与场景探索合集(2023版)

更新内容 更新 SmartX 超融合在证券行业的覆盖范围、部署规模与应用场景。新增操作系统信创转型、Nutanix 国产化替代、网络与安全等场景实践。更多超融合金融核心生产业务场景实践,欢迎阅读文末电子书。 在金融行业如火如荼的数字化转型大潮中,传统架…

使用Python语言生成区块链地址

# 单次运行 import binascii import sha3 from ecdsa import SigningKey, SECP256k1priv SigningKey.generate(curveSECP256k1) # 生成私钥 pub priv.get_verifying_key() # 生成公钥keccak sha3.keccak_256() keccak.update(pub.to_string()) # keccak_256哈希运算 addr…

STM32学习笔记——定时器

目录 一、定时器功能概述 1、基本定时器(TIM6&TIM7) 工作原理 时序 2、通用计时器(TIM2&TIM3&TIM4&TIM5) 时钟源 外部时钟源模式1&2 外部时钟源模式2 外部时钟源模式1 定时器的主模式输出 输入捕获…

春节回家坐飞机后助听器就不好用了?如何过安检、拖运?

春节即将来临,很多人都要乘坐飞机回家或者出游。如果你是一位助听器使用者,你可能会有一些疑问:坐飞机能戴助听器吗?助听器会不会受到安检设备的影响?直接将助听器放在传送带上可以吗?……别担心&#xff0…

前端JavaScript篇之addEventListener()方法的参数和使用

目录 addEventListener()方法的参数和使用参数和使用typelisteneroptionsuseCapturewantsUntrusted addEventListener()方法的参数和使用 addEventListener() 是 JavaScript 中用于向指定元素添加事件监听器的方法。这个方法通常用于处理用户交互,比如点击、鼠标悬…

springboot163美食推荐商城的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

日历功能——C语言

实现日历功能&#xff0c;输入年份月份&#xff0c;输出日历 #include<stdio.h>int leap_year(int year) {if(year % 4 0 && year % 100 ! 0 || year % 400 0){return 1;}else{return 0;} }int determine_year_month_day(int *day,int month,int year) {if(mo…

计划任务功能优化,应用商店上架软件超过100款,1Panel开源面板v1.9.6发布

2024年2月7日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.6版本。 在v1.9.5和v1.9.6这两个小版本中&#xff0c;1Panel针对计划任务等功能进行了多项优化和Bug修复。此外&#xff0c;1Panel应用商店新增了3款应用&#xff0c;上架精选软件应用超过1…

vue 实现一个持续时间定时器组件

vue 实现一个定时器组件 效果图子组件父组件 效果图 子组件 新建一个timer.vue文件 <template><span :class"{red: string > 600}">{{ string | formatDurationS }}</span> </template> <script>export default {name: timer,pro…