3-3. SpringBoot项目集成【用户身份认证】实战 【全流程篇】基于JWT+双重检查的登录+登出+拦截器

前言

书接上文 实战核心篇,我们已经把JWT的核心代码实现了! 文中不止是代码实现,更是使用到了设计原则,提升大家的内功心法。并且抛转引玉的实现了RSA和HMAC两种算法,还没看过的同学,建议先看上文。所以对于基于JWT的Token用户身份认证机制来说,剩下的就是与接口结合起来,服务端需要做三部分处理:

  • 登录接口,生成JWT,返回给前端。

  • 其它接口,校验JWT。如果每个接口在调用前都去调用一下校验Token,对接口的侵入性太强,这显然不是我们期望的。这时,我们可以使用拦截器对请求进行拦截实现。

    另外,因为接口中还可能需要获取用户信息,所以我们还需要一个全局管理用户信息的地方,详见正文!

  • 登出接口,目的是能主动退出让JWT失效。

    上文说过,JWT是无法主动失效的,所以就需要引入其它处理,详见正文!

本文对应的思维导图:

实战基于JWT+双重检查的登录+登出+拦截器 --防XSS+CSRF漏洞


专栏介绍

因为可能还有很多同学还不清楚上下文,所以简单介绍一下这个专栏要做的事:

天罡老哥和狗哥(博客主页)有意从0到1带大家搭建一个SpringBoot+SpringCloud+Vue的前后端分离项目!
打造一个短小精悍、技术主流、架构规范的前后端分离实战项目!我负责后端,狗哥负责前端!
目的就是让大家通过项目实战,学到一些真东西,将所学理论落地,助力有心强大的你更快的成长!开启你的工作之旅,让开发游刃有余!

详细的后端规划和后端大纲思维导图在开篇已经给出,你可以到开篇查收:基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇


CSDN成就一亿技术人


一、接口文档

本文中,我们主要实现两个接口:登录和登出,在开发之前,我们应提前与前端一起协商定义好接口文档。

在这里给出接口文档,另一个目的,也是让大家更了解我们即将要开发的接口。

1. 用户名+密码登录

简要描述
  • 输入用户名+密码,返回成功授权的token
请求URL
  • http://ip:port/auth/login
请求方式
  • POST
请求header
  • 无
请求示例
{
   
   
    "userName":"张三",<
实例详解:Java使用JWT和Redis实现高效单点登录(SSO) 单点登录(Single Sign-On,简称SSO)是一种身份验证和访问控制机制,允许用户使用一组凭证(如登录名和密码)登录到多个应用程序中,而无需为每个应用程序单独进行身份验证。用户只需要登录一次就可以访问所有系统的应用和资源。相对于传统的每个系统都需要登录一次的方式,单点登录可以提高用户体验,降低用户的登录成本。在本文中,我们将通过使用JWT(JSON Web Token)和Redis来实现SSO功能,并提供详细的Java代码实例。通过结合JWT和Redis,我们可以轻松实现单点登录(SSO)的功能。 阅读详情

相关推荐

SpringBoot单Token认证:滑动窗口续期与JWT最佳实践

JWT是Web应用身份认证的基础技术,其核心在于安全传递声明(claims)并验证签名与时效性。传统双Token模式因引入refresh token状态管理,导致前端逻辑复杂、安全隐患增多及运维成本攀升。单Token方案通过动态exp更新与滑动窗口续期机制,在保持无状态特性的前提下,实现服务端主导的透明续期,兼顾安全性与用户体验。该方案依赖JWT标准字段(iss/sub/aud/iat/exp)的严谨使用、自定义claims的精简嵌入,以及HTTP响应头(如X-Auth-Token)的规范传递。适用于Spr

weixin_34279184的博客 490

Django实现JavaScript实现JWT用户登陆、登出

本教程通过实例介绍了如何使用Django与JavaScript结合,实现用户登录、登出功能,并在前端动态展示用户状态。通过利用JWT Token,确保了用户身份验证的安全性和数据传递的可靠性。这个功能对于前后端分离的项目尤为重要,能够实现安全、高效的用户管理。

Mr数据杨 3万+

6.1 SpringBoot解决跨域,我推荐这2种超实用方案

在文章【2-2】中,我和你介绍了支持跨域的最简单方法,即在Controller上增加@CrossOrigin注解。通过这个方法,我们临时支持了跨域,但是这种方法对跨域的支持并不彻底,当前端发送options预检请求时,依然会出现跨域CORS error。今天这篇文章分享了我使用SpringBoot解决跨域问题的经验和方法,并提供了详细的代码示例和解释,适合对跨域问题不太熟悉的读者。主要讲解SpringBoot如何解决跨域,首先会验证跨域,然后再给出我推荐的2种超实用解决跨域方案!新增一个拦截器类。

天罡gg的专栏 4895

7.14 注册登录如何安全传输密码?如何安全保存密码?SpringBoot实战项目手把手教你

在前面的章节中,我们实现了简易的注册和登录功能,其它功能,像验证码、限流等或许你稍微研究一下都能找到解决方案,但有一个点你可能不那么容易搞定,那就是注册登录密码如何安全传输?可以肯定的是:密码一定需要加密,一定不能明文传输!但加密算法怎么选?密码又要怎么安全保存?如果你没有一些项目经验,估计有点棘手,最后还会感觉不那么保险。难者不会, 会者不难!基于此,我今天决定写一篇简短的博文,手把手教你在SpringBoot实战项目中解决密码传输和密码保存的问题!

天罡gg的专栏 786

【深度强化学习】(2) Double DQN 模型解析,附Pytorch完整代码

Double DQN 算法是 DQN 算法的改进版本,解决了 DQN 算法过估计行为价值的问题。Double DQN 算法不直接通过最大化的方式选取目标网络计算的所有可能 Q 值,而是首先通过估计网络选取最大 Q 值对应的动作。在 Double DQN 框架中存在两个神经网络模型,分别是训练网络与目标网络。这两个神经网络模型的结构完全相同,但是权重参数不同;每训练一段之间后,训练网络的权重参数才会复制给目标网络。

博观而约取,厚积而薄发 1万+

Zabbix在Ubuntu 22.04上的性能优化与监控实战:从基础安装到高级配置

本文详细介绍了在Ubuntu 22.04系统上部署和优化Zabbix监控系统的完整流程,从基础安装到高级配置。内容包括MySQL数据库设置、Zabbix服务器与Web前端优化、性能调优策略以及实战监控场景应用,帮助用户构建高效的企业级监控解决方案。

sss66的博客 890

判断两个多边形是否相交(java实现)

判断两个多边形是否相交 ,当前认为一个点相交也是相交,可针对凹多边形和凸边型等多复杂的多边形进行相交判断,采用java实现,因为网上java实现的比较少,所以这里写下如何实现,适用于碰撞检测,地图等等应用场景

IT_CREATE的博客 5834

国产信创服务器软硬件兼容情况1 --- ARM架构

信创,即信息技术应用创新产业,它是数据安全、网络安全的基础,也是新基建的重要组成部分...

一只猿的自我修养 4723

运放单电源供电和双电源供电的实际应用案例

文章摘要:本文对比分析了运放单电源与双电源供电的典型应用场景及电路设计要点。单电源供电适用于低成本、小体积设备,如便携音箱(5V供电+中点偏置)、工业4-20mA信号转换(12V供电+电压跟随)和物联网传感器(3.3V低功耗设计);双电源供电则适合高精度要求场景,如Hi-Fi音响(±15V对称输出)、医疗设备(±5V微弱信号放大)和精密仪器(±15V宽动态范围)。文末提供常见运放选型对照表,涵盖LM324、TL082等型号的供电参数与核心特性,为不同应用场景提供选型参考。(149字)

qq_37999850的博客 601

基于点云数据的统计滤波算法改进

随着三维视觉和点云处理技术的发展,点云数据在机器人、自动驾驶、增强现实等领域得到了广泛应用。而点云数据中常常包含着各种噪声和异常点,这些噪声和异常点会影响后续的数据处理和分析任务。因此,对点云数据进行滤波处理是必不可少的一步。在点云滤波算法中,统计滤波(Statistical Filtering)是一种常见且有效的方法。它通过对点云数据进行统计分析,将噪声和异常点剔除或修复,从而得到更为准确和可靠的点云数据。本文将介绍一种改进的统计滤波算法,并提供相应的源代码实现。

QfcaLinux的博客 288

YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性

本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1266

【机器学习系列】一文搞懂 零知识机器学习(zkML)

位串行乘法器:实现了Booth编码优化,将乘法分解为移位-加法序列,减少部分积数量50%:模拟脉动阵列的2D网格计算,支持分块(tiling)策略优化内存层次卷积映射:提供直接卷积(行缓冲+滑动窗口)和im2col+GEMM两种硬件映射策略。

VectorShift的博客 145

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 3-2. SpringBoot项目集成【用户身份认证】实战 【实战核心篇】基于JWT生成和校验Token
下一篇: 4-1. centos7安装和卸载mysql5.7
天罡gg
博客等级 码龄16年 6万+粉丝 115原创
评论 66
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天罡gg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值