SpringCloud Alibaba 实战:如何让 jwt token 主动失效?

如何使用jwt 完成注销(退出登录)功能 不信的的话可以自己尝试下。使用JWT应该是无状态的,这意味着你应该将所需的一切存储在payload中,并跳过对每个请求执行DB查询,但是如果你计划有一个严格的注销功能,无法等待Token自动过期,即使你已经从客户端清除了Token,然后你可能需要违背无状态规则并执行一些查询。是一个很好的选择,这将允许在内存中快速访问列表,然后,在某个中间件中,运行在每个授权请求上,你应该检查提供的令牌是否在名单中🕵️‍,如果不在的话就抛出一个未认证异常,如果有让它通过,JWT验证将处理它并确定它是否已过期或仍然有效。 阅读详情

 前言

有一个看我SpringCloud alibaba系列文章的粉丝私下问我:如何处理jwt失效的问题?修改密码或退出登录后需要将之前的jwt token失效掉,不允许使用旧token登录系统。

我说:很简单呀,咱们直接 无为而治,用户退出或修改密码的时候前端直接删除这个token不就完了吗?后端啥都不用管,啥也不用做。

他说:别闹,你的每篇文章我都给你一键三连。

我当时就被感动了,既然是这样的好读者,我果断答应专门给他写篇文章来分享一下我这个不太成熟的做法,改造一下这个SpringCloud alibaba项目。

在正式开始之前,我们先来回顾一下oauth2中token的相关知识。

知识回顾

众所周知,在 OAuth2 体系中认证通过后返回的令牌信息分为两大类:不透明令牌(opaque tokens) 和 透明令牌(not opaque tokens)。

不透明令牌 是一种无可读性的令牌,一般来说就是一段普通的 UUID 字符串。使用不透明令牌时资源服务不知道这个令牌是什么,代表谁,需要调用认证服务器校验、获取用户信息。使用不透明令牌采用的是 中心化 的架构。

透明令牌 一般指的是我们常说的JWT Token,用户信息保存在 JWT 字符串中,资源服务器自己可以解析令牌不再需要去认证服务器校验令牌。使用JWT是属于 无状态、去中心化 的架构。

一旦我们选择了使用JWT,就需要明确一点:在不借助外力的情况下,让JWT失效的唯一途径就是等token自己过期,无法做到主动让JWT失效。非要让JWT有主动失效的功能只能借助外力,即在服务端存储JWT的状态,在请求时添加判断逻辑,这个与JWT的无状态化、去中心化特性是矛盾的。但是,既然选择了JWT这条路,那就只能接受这个现实。

解决思路

上面说了,要实现JWT的主动失效需要借助外力,在服务端存储JWT的状态,一般使用Redis等高速缓存。而存储JWT状态又分为两种方案:

  1. 白名单机制

    认证通过时,把JWT存到Redis中。注销时,从缓存移除JWT。请求资源添加判断JWT在缓存中是否存在,不存在拒绝访问。这种方式和cookie/session机制中的会话失效删除session基本一致。

  2. 黑名单机制

    注销登录时,缓存JWT至Redis,且缓存有效时间设置为JWT的有效期,请求资源时判断是否存在缓存的黑名单中,存在则拒绝访问。

白名单和黑名单的实现逻辑差不多,黑名单不需每次登录都将JWT缓存,仅仅在某些特殊场景下需要缓存JWT,给服务器带来的压力要远远小于白名单的方式。

我更倾向于使用黑名单机制,有两个原因:

一是会大大节省Redis的存储空间,我们甚至都不需要存储完整的jwt,只需要存储jwt中的唯一id jti即可。

SpringCloud Alibaba 实战 - 如何让 jwt token 主动失效? 前言 有一个看我SpringCloud alibaba系列文章的粉丝私下问我:如何处理jwt失效的问题?修改密码或退出登录后需要将之前的jwt token失效掉,不允许使用旧token登录系统。 我说:很简单呀,咱们直接 无为而治,用户退出或修改密码的时候前端直接删除这个token不就完了吗?后端啥都不用管,啥也不用做。 他说:别闹,你的每篇文章我都给你一键三连。 我当时就被感动了,既然是这样的好读者,我果断答应专门给他写篇文章来分享一下我这个不太成熟的做法,改造一下这个SpringCloud al 阅读详情

相关推荐

Spring Cloud Alibaba微服务JWT认证生产实践

JWT是一种基于声明的身份令牌,其核心价值在于实现跨服务、跨进程的可信身份传递。在微服务架构中,单纯解析Token远不足以支撑高可用认证体系——必须结合密钥轮换、网关统一校验、下游上下文注入与分布式失效机制,才能构建具备类Session可控生命周期的安全契约。本文围绕Spring Cloud Alibaba生态,深入剖析HS256密钥分发、Nacos动态配置、Gateway身份透传及布隆过滤器加速状态校验等关键技术,覆盖Token生成、验证、刷新与登出全链路,为中后台系统提供可落地的JWT工程化方案。

weixin_30514745的博客 425

SpringCloud Alibaba微服务中OAuth2认证服务器自定义异常处理实战

在微服务架构中,统一认证授权是保障系统安全的核心环节。OAuth2作为行业标准授权协议,其默认的异常响应格式往往过于底层和标准化,难以满足现代前后端分离应用对用户体验和运维效率的要求。通过深入Spring Security OAuth2框架原理,我们可以利用其提供的WebResponseExceptionTranslator扩展点,拦截并重写认证服务器的异常处理流程。这一技术实践的核心价值在于,能够将协议层的原始错误信息,转换、封装为符合自身业务API规范的统一响应格式,从而显著提升前端错误处理的便捷性、用

weixin_30614109的博客 321

Nacos JWT密钥配置全解析:从原理到避坑实战指南

在微服务架构中,身份认证是保障系统安全的核心环节。JWT(JSON Web Token)作为一种流行的无状态认证方案,其安全性高度依赖于密钥的强度与正确配置。理解JWT的签名原理与密钥管理机制,对于构建可靠的分布式系统至关重要。本文聚焦于Nacos认证模块中JWT密钥配置这一高频问题,深入剖析密钥生成、存储、优先级等关键技术细节,并结合实际工程场景,提供从单机部署到集群环境、从版本升级到客户端集成的全链路解决方案,帮助开发者有效规避配置陷阱,确保微服务注册与配置中心稳定运行。

weixin_30616969的博客 587

微服务鉴权架构设计与Sa-Token实战

在分布式系统架构中,鉴权机制是保障服务安全的核心组件。基于JWT的无状态Token验证已成为现代微服务的主流方案,其通过加密签名实现跨服务身份认证,相比传统Session方案更适应云原生环境。Sa-Token作为轻量级Java权限框架,通过路由匹配式鉴权和动态权限加载机制,显著简化了微服务安全体系的实现复杂度。该框架与SpringCloud生态深度集成,在网关层统一管控、服务间鉴权等场景展现出色性能,实测比Spring Security鉴权效率提升40%。典型应用场景包括网约车多端登录隔离、金融级动态权限控

weixin_30546189的博客 420

基于Spring Cloud与OAuth2构建微服务单点登录(SSO)系统实战指南

单点登录(SSO)是解决分布式系统用户身份统一认证与授权的核心技术,其核心原理是通过一个中心化的认证服务器来管理用户会话,避免用户在多个关联应用间重复登录。在微服务架构中,OAuth 2.0协议因其标准化的授权流程和安全性,常被用作实现SSO的理论基础,通过授权码等模式在客户端、资源服务器和授权服务器之间安全地传递令牌。这项技术的核心价值在于提升用户体验、简化权限管理并增强系统安全性。其典型的应用场景包括企业内部多系统集成、电商平台以及任何由多个独立服务构成的应用生态。本文聚焦于使用Spring Cloud

weixin_33841503的博客 428

Sa-Token在微服务网关鉴权中的实践与优化

微服务架构中的API网关鉴权是保障系统安全的关键环节。传统的Spring Security方案虽然功能全面,但存在配置复杂、学习曲线陡峭等问题。轻量级Java权限框架Sa-Token通过注解式鉴权和Redis分布式会话支持,为中小型项目提供了更简洁的解决方案。该框架遵循约定优于配置原则,支持@SaCheckLogin等注解实现方法级权限控制,天然集成Redis实现分布式会话管理,包含踢人下线、多端登录等开箱即用的业务功能。在技术实现上,通过全局过滤器和路由配置实现网关层统一鉴权,结合JWT或Feign拦截器

weixin_30321709的博客 345

SpringBoot+Vue3全栈动漫商城开发实战

现代Web开发中,前后端分离架构已成为主流技术范式。通过RESTful API实现前后端解耦,SpringBoot作为Java领域的主流后端框架,提供自动配置和快速开发能力,结合MyBatis实现高效数据持久化操作。Vue3作为新一代前端框架,其响应式系统和组合式API大幅提升开发效率。在电商系统开发场景中,这种技术组合能有效支撑商品管理、订单处理等核心业务模块。本文以动漫商城项目为例,详解如何运用SpringBoot+Vue3+MyBatis技术栈实现SPU/SKU商品体系设计和订单状态机开发,其中特别针

weixin_34025051的博客 417

SpringBoot+Vue实习生管理系统全栈开发实践

前后端分离架构已成为现代Web开发的主流模式,其中SpringBoot作为Java领域的微服务框架,与Vue.js前端框架的组合备受开发者青睐。这种技术栈通过RESTful API实现前后端解耦,利用Spring Security保障系统安全,结合MyBatis Plus提升数据库操作效率。在企业级应用中,此类架构特别适合需要快速迭代的业务场景,如实习生管理系统这类包含权限管理、数据可视化等核心功能的项目。通过整合JWT认证、RBAC权限模型和ECharts数据展示,开发者可以构建出符合企业实际需求的全栈解

weixin_30791095的博客 395

Superpowers不是AI插件,而是AI编程的工程纪律操作系统

AI编程工具常被误解为代码生成器,但真正影响交付质量的是开发过程的可控性与可验证性。Superpowers 本质是一套嵌入式工程纪律框架,通过需求澄清、计划校验、TDD执行、自动审查等机制,将模糊需求转化为结构化任务流。它不提升模型能力,而是约束AI行为边界,确保每行代码符合设计文档、安全规范与国产化适配要求。适用于SpringCloud微服务、Vue3企业级应用、达梦DB信创项目等需长期维护的生产系统,是区别于Cursor、Codex等‘Vibe Coding’工具的关键分水岭。

weixin_34341229的博客 318

SpringCloud Alibaba微服务实战三十五 - 实现退出登录后注销 jwt token

大家好,我是飘渺。 有一个看我SpringCloud alibaba系列文章的粉丝私下问我:如何处理jwt失效的问题?修改密码或退出登录后需要将之前的jwt token失效掉,不允许使用旧token登录系统。 我说:很简单呀,咱们直接 无为而治,用户退出或修改密码的时候前端直接删除这个token不就完了吗?后端啥都不用管,啥也不用做。 他说:别闹,你的每篇文章我都给你一键三连。 我当时就被感动了,既然是这样的好读者,我果断答应专门给他写篇文章来分享一下我这个不太成熟的做法,改造一下这个SpringCloud

飘渺Jam的博客 1万+

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移”

本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。

weixin_30635053的博客 708

【数学建模】 进化计算与群体智能

遗传算法(GA)是一种用于优化和搜索问题的启发式算法。它模拟了自然选择的过程,其中个体通过遗传和变异进行繁殖,逐渐进化出更优的解。基本步骤初始化:生成初始种群。适应度评估:评估种群中每个个体的适应度。选择:根据适应度选择个体进行繁殖。交叉:选定个体对进行基因交换,生成新的后代。变异:对一些个体进行基因变异,以增加多样性。迭代:重复评估和繁殖过程,直至达到停止条件。粒子群优化算法(PSO)是一种基于群体智能的优化算法,由Kennedy和Eberhart于1995年提出。其灵感来源于鸟群觅食的行为。

weixin_42914989的博客 1113

智能车图像处理3-入门级分析2 ---直道冲刺

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 4299

【ARFoundation自学04】AR Tracked Image 图像追踪识别与对应类的调用

1.添加组件 2.创建图像识别库 3.创建识别后追踪的物体(UI、模型等)

leoysq的博客 2560

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

STM32G431的 FDCAN使用5M加速时,出现奇葩问题,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1635

少儿学编程系列--使用递归画出龙形曲线DragonCurve

龙形曲线(Dragon Curve) 龙形曲线(Dragon Curve)又叫分形龙,是一种自相似碎形曲线的统称,因形似龙的蜿蜒盘曲而得名 使用黄金比例画龙形曲线 根据黄金比例画一条龙曲线。每次递归,第一步向左转32.89度,移动0.74倍原距离;第二个递归步骤向右转46.99度,移动原来距离的0.55倍。请查看这个网页(https://larryriddle.agnesscott.org/ifs/heighway/goldenDragon.htm)了解关于龙形黄线数学的细节 龙形曲线效果 .

penriver的博客 2296

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: HashMap 是线程不安全的?
下一篇: SpringCloud Gateway集成Alibaba Nacos实现动态路由配置
Java架构师小森
博客等级 码龄5年 23粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值