网易首页 > 网易号 > 正文 申请入驻

面试中被嘲笑Token放在Redis里?这把给我干沉默了...

0
分享至

Java精选面试题(微信小程序):5000+道面试题和选择题,真实面经简历模版,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!

面试被问登录认证怎么做,你说"Token 放 Redis 里"。面试官笑了一下,说你不懂 JWT 的无状态设计。

这场景不少见。知乎上有人专门问过,底下争了半天,说的其实是同一件事:选型没问题,但你没说清楚为什么选。


这篇文章把这件事说清楚:从 JWT 是什么,到放 Redis 的原因,再到面试里怎么回答。

JWT 到底是什么

JWT 全称 JSON Web Token,说白了就是一段字符串,用点号分成三段:Header、Payload、Signature。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


JWT的三段结构:Header(算法类型)、Payload(用户信息)、Signature(签名),三部分Base64编码后用点号连接JWT的三段结构:Header(算法类型)、Payload(用户信息)、Signature(签名),三部分Base64编码后用点号连接

  • Header :声明算法类型(比如 HS256)

  • Payload :存用户信息(用户 ID、角色、过期时间)。只是 Base64 编码,不是加密 ——任何人拿到 token 都能解码看到内容,密码绝对不能放

  • Signature :用 Header + Payload + 服务端密钥算出来的签名,作用是防篡改


整个验证流程:


JWT认证完整流程:用户登录→服务端签发Token→客户端存储→请求时带上Token→服务端验签

登录成功 → 服务端签发 Token → 客户端保存(一般放 localStorage)→ 每次请求在 Header 里带上 Authorization: Bearer → 服务端验签,从 Payload 取用户信息。全程不查数据库、不查 Redis,自给自足。 这就是"无状态"的意思。

JWT"无状态"的代价:四个致命场景

无状态听起来很美,上线后就知道了。

  • 场景一:账号被盗,无法立即踢人 。Token 有效期 2 小时,现在还剩 1 小时 45 分钟。怎么让它立刻失效?纯 JWT 做不到——已签发的 token 在过期前一直有效。

  • 场景二:封禁用户不生效 。账号封了,但手里的 token 还能用。

  • 场景三:改密码不踢其他设备 。用户改了密码,想让其他设备全部失效。纯 JWT 做不到。

  • 场景四:token 过期吞表单 。用户填了 20 多分钟的表单,点提交,token 过期了,整个内容全丢。

这四个场景加在一起,几乎是所有正经业务系统都会碰到的问题。

为什么要把 Token 放 Redis

解决上面这些问题,最直接的方案是黑名单 。

用户被踢下线时,把 token 加进黑名单。每次请求先查黑名单,在里面就拒。黑名单存哪?内存不行(多台服务器不共享,重启丢),数据库太慢(每个请求都查一次受不了),Redis 最合适 ——查询不到 1ms,分布式共享。

// 退出登录时,把 token 加入黑名单
public void logout(String token) {
long expiration = jwtUtil.getExpiration(token);
long ttl = expiration - System.currentTimeMillis();
if (ttl > 0) {
redisTemplate.opsForValue().set(
"blacklist:" + token, "1", ttl, TimeUnit.MILLISECONDS
);
}
}


// 验证 token 时,先查黑名单
public boolean isTokenValid(String token) {
if (redisTemplate.hasKey("blacklist:" + token)) {
returnfalse;
}
return jwtUtil.verify(token);
}

Redis 只存"已失效"的 token,平时没什么写入,查询也快。

还有更彻底的方案:直接把 token 存 Redis,每次验证都去 Redis 查。 这和传统 Session 没太大区别,只是借了 JWT 格式当 Session ID 用。

黑名单 vs 白名单:两种方案的本质区别

方案

存什么

查几次 Redis

能否主动吊销

是否无状态

纯 JWT

不存

0 次

不能

JWT+黑名单

存失效的 token

1 次

不完全是

token 存 Redis(白名单)

存所有 token

1 次

黑名单 相对轻量,正常请求不写 Redis,只有踢人时才写,多数业务选这个。白名单 控制力更强,能做限制同时在线设备数、实时查看在线状态,代价是每次请求都依赖 Redis。

双 Token 续期方案

Token 到期了,用户正在操作怎么办?

  • AccessToken :有效期短(30 分钟),做实际鉴权

  • RefreshToken :有效期长(7 天),只用来换 AccessToken

AccessToken 过期,前端用 RefreshToken 换新的,对用户无感。RefreshToken 存 Redis,用户改密码就删掉,自动让他下次操作时重新登录。

Redis 本身可靠吗

有人担心引入单点故障。Redis 的高可用方案跑了十几年:

  • Sentinel(哨兵模式) :主节点挂了自动选新主

  • Cluster(集群模式) :数据分片,横向扩展


Redis Cluster架构:数据分片分布在多个节点,支持横向扩展和自动故障转移

性能方面 Redis 单次查询 1ms 以内,单机 QPS 十几万。说"不能放 Redis 因为会单点故障"——这逻辑说不通。

面试官到底在嘲笑什么,两种情况。

  • 第一种 :你用了 JWT 但验证时完全不走签名,每次都去 Redis 查 token 是否存在。这等于只借了 JWT 格式,没用它的能力——不如直接生成随机字符串当 Session ID,还省了编解码开销。面试官嘲笑的是这里。

  • 第二种 :你确实有业务需求需要主动吊销,选了 JWT+Redis 方案。但面试里只说了"放 Redis",没说为什么。面试官误以为你不懂无状态设计。

第一种要改方案,第二种要改表达。

纯 JWT 什么时候真的合适

跨服务调用 :网关层做一次验签,用户信息往下游传。订单服务、支付服务直接从 JWT 取 userId,不用再查 Redis。这里 JWT 承担的是身份传递角色,不是管理登录会话。

一次性凭证 :邮箱验证链接、密码重置链接、临时分享链接。签一次用一次,不需要续期和吊销。

安全要求不高的内部工具 :用户量少,不需要踢人下线。纯 JWT 省一层依赖。

面试怎么答

别上来就说"放 Redis",也别上来就说"JWT 无状态"。

先说业务需求:需不需要主动踢人?改密码后需不需要其他设备立刻失效?需不需要限制同时在线设备数?

然后根据需求说方案:需要的话选 JWT+Redis 黑名单,说清楚纯 JWT 做不了主动吊销;不需要的话纯 JWT 够了,说清楚签名验证流程和密钥管理。

面试官真正想听的不是你选了哪个,是你知不知道每个方案的边界。"Token 放 Redis"这件事本身没问题,问题是说不出来为什么放。

来源:https://www.zhihu.com/question/12853133755

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有技术或摸鱼交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!在线摸鱼:https://www.yoodb.com/

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
男生怎么做才能克制自己的欲望?网友:除了释放,其他都很煎熬!

男生怎么做才能克制自己的欲望?网友:除了释放,其他都很煎熬!

解读热点事件
2026-07-30 00:51:55
男子认48岁女房东当干妈,每周去其家中蹭饭,酿成一场悲剧

男子认48岁女房东当干妈,每周去其家中蹭饭,酿成一场悲剧

晓艾故事汇
2025-09-08 17:00:17
原来这些办公神器都有平替,果然新脑子就是好使,看谁还花钱买

原来这些办公神器都有平替,果然新脑子就是好使,看谁还花钱买

家居美少女
2026-07-31 20:20:03
印度政府遭遇执政危机,莫迪为挽回民心,可能抓紧找中国开刀

印度政府遭遇执政危机,莫迪为挽回民心,可能抓紧找中国开刀

忠于法纪
2026-08-01 09:25:15
广东队措手不及!

广东队措手不及!

体育哲人
2026-08-01 09:50:58
普京刚警告“生死攸关”,24小时不到,助理发表对华争议言论

普京刚警告“生死攸关”,24小时不到,助理发表对华争议言论

流史岁月
2026-07-30 14:35:06
克拉拉称:法国是仅次于美英的全球第三大AI强国!网友:太谦虚,法国第二,印度第一

克拉拉称:法国是仅次于美英的全球第三大AI强国!网友:太谦虚,法国第二,印度第一

大白聊IT
2026-07-31 00:54:01
180万欧的身价,换不来德甲一分钟!王钰栋该想明白1件事

180万欧的身价,换不来德甲一分钟!王钰栋该想明白1件事

曹老师评球
2026-08-01 00:48:09
❤️ 梅西决赛后直奔罗萨里奥陪父亲!68岁豪尔赫正与疾病抗争

❤️ 梅西决赛后直奔罗萨里奥陪父亲!68岁豪尔赫正与疾病抗争

乡野小珥
2026-08-01 01:00:00
新片票房大爆后,64岁周星驰再迎喜讯,连张艺谋都刮目相看

新片票房大爆后,64岁周星驰再迎喜讯,连张艺谋都刮目相看

洲洲影视娱评
2026-07-30 14:09:39
维尼修斯团队三招直取皇马要害,迪奥曼德也成筹码,皇马强势回应

维尼修斯团队三招直取皇马要害,迪奥曼德也成筹码,皇马强势回应

穆里尼奥主义者
2026-08-01 09:32:00
92年湖南一男子预感工业铜要大涨,40一公斤时砸下重金囤了100吨

92年湖南一男子预感工业铜要大涨,40一公斤时砸下重金囤了100吨

三农老历
2026-07-31 02:35:32
45舰封锁航母通道,052D开火,美军紧急应对

45舰封锁航母通道,052D开火,美军紧急应对

秋枫凋零
2026-07-31 12:55:10
黄一鸣自曝:王思聪每次约她,车费都给10万,来给5万,回再给5万

黄一鸣自曝:王思聪每次约她,车费都给10万,来给5万,回再给5万

汉史趣闻
2025-06-24 10:07:59
今天才知道,张柏芝同意陈冠希拍照,竟是这3个现实又露骨的原因

今天才知道,张柏芝同意陈冠希拍照,竟是这3个现实又露骨的原因

秋姐居
2026-07-30 19:30:12
菲律宾形势大变?接班人上位,对华态度曝光,马科斯坐不住了!

菲律宾形势大变?接班人上位,对华态度曝光,马科斯坐不住了!

历史的烟火
2026-08-01 01:24:57
俄罗斯让中国心凉?真正恐怖的并非西方围堵,而是我们低估了自己

俄罗斯让中国心凉?真正恐怖的并非西方围堵,而是我们低估了自己

混沌录
2026-04-09 16:27:09
传承感拉满!阿根廷新星尼科·帕斯晒照:身着梅西19号战袍

传承感拉满!阿根廷新星尼科·帕斯晒照:身着梅西19号战袍

山野卢员外
2026-08-01 10:31:33
欧盟万万没想到:用来让乌克兰攻击俄罗斯的武器,会要了自己的命

欧盟万万没想到:用来让乌克兰攻击俄罗斯的武器,会要了自己的命

菁菁子衿
2026-07-31 12:37:12
80万件武器失踪,3万朝军待命,中方发警告,俄乌局势全面失控

80万件武器失踪,3万朝军待命,中方发警告,俄乌局势全面失控

战域笔墨
2026-08-01 00:06:39
2026-08-01 11:12:49
Java精选
Java精选
一场永远也演不完的戏
1797文章数 3859关注度
往期回顾 全部

科技要闻

特斯拉拆不掉中国制造

头条要闻

媒体:安倍晋三给中国添的堵 高市早苗又来一遍

头条要闻

媒体:安倍晋三给中国添的堵 高市早苗又来一遍

体育要闻

欧足联掀桌!因凡蒂诺这次真玩大了?

娱乐要闻

周星驰质疑董宇辉看《大话西游》500遍

财经要闻

宇树造富盛宴:王兴兴将跻身百亿富豪

汽车要闻

听劝!换回机械门把手,这才是碳基生物该开的车!

态度原创

游戏
本地
健康
公开课
军事航空

SE亲手埋没"劲敌"!《怪猎》原本可能不会一家独大

本地新闻

神仙也“蓉”漂,哪吒与八仙,皆是成都出品!

中风易复发!谈中风康复与二级预防

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

特朗普否认允许乌克兰生产爱国者拦截弹

无障碍浏览 进入关怀版