面试官:说说你项目中JWT的执行流程?

news/2025/2/21 6:44:45/文章来源:https://www.cnblogs.com/vipstone/p/18723865

JWT 在目前的项目开发中使用到的频率是非常高的,因此它也是面试常问的一类问题,所以今天我们就来看看“项目中 JWT 的执行流程?”这个问题。

1.什么是 JWT?

JWT(JSON Web Token) 是一种开放标准(RFC 7519),用于在网络应用间安全传输信息,通常用于身份验证和信息交换。其核心特点是通过紧凑且自包含的 JSON 对象传递数据,无需服务端存储会话状态。

2.JWT组成

JWT 是由三部分组成的:

  • Header(头部):通常由以下两部分组成:
    • Token 类型:通常是 JWT。
    • 加密算法:例如 HS256(HMAC SHA-256)、RS256(RSA SHA-256)等。
  • Payload(载荷) :JWT 的主体部分,通常为以下三类:
    • 标准声明(Registered Claims):预定义的字段,如 iss(发行者)、exp (过期时间)、sub(主题)等。
    • 公共声明(Public Claims):用户自定义的字段,例如用户 ID、用户名、角色等。
    • 私有声明(Private Claims):在特定场景下使用的字段,通常用于内部系统。
  • Signature(签名):用于验证 Token 的完整性和防止篡改。

它们之间用点“.”分隔,形成一个字符串(Token)。

3.执行流程

JWT 执行流程如下:

在 Spring Boot 项目中,JWT 的执行流程主要分为以下步骤:

1. 用户登录与令牌生成

  • 用户通过用户名和密码发起登录请求。
  • 服务端验证用户凭证,若验证成功,则使用 JWT 工具类生成令牌:
    • Header:指定算法(如 HS256)和令牌类型(JWT)。
    • Payload:包含用户信息(如用户 ID、角色)和声明(如过期时间 exp)。
    • Signature:使用密钥对 Header 和 Payload 进行签名,确保令牌不可篡改。

2. 客户端存储令牌

  • 服务端将生成的 JWT 返回给客户端(通常通过响应体或 Header)。
  • 客户端(如浏览器或移动端)将令牌存储在本地(如 LocalStorage 或 Cookie)。

3. 请求携带令牌

  • 客户端在后续请求的 Authorization Header 中以 Bearer 格式携带 JWT。

4. 服务端验证令牌

  • 拦截器/过滤器:Spring Boot 通过自定义拦截器或 Spring Security 过滤器链拦截请求,提取并验证 JWT:
    • 签名验证:使用密钥校验签名是否有效。
    • 过期检查:检查 exp 字段是否过期。
    • 用户信息提取:解析 Payload 中的用户信息(如用户 ID),用于后续权限控制。

5. 授权与响应

  • 若验证通过,服务端处理请求并返回数据。
  • 若验证失败(如令牌过期或签名错误),返回 401 状态码或自定义错误信息。

4.JWT核心实现代码

// 生成 JWT(示例)|SECRET_KEY 为服务保存的密钥。
public String generateToken(UserDetails user) {
return Jwts.builder()
.setSubject(user.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}// 验证 JWT(示例)
public boolean validateToken(String token) {try {Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);return true;} catch (Exception e) {return false;}
}

注意事项

  • 密钥安全:签名密钥需妥善保管,并定期修改,避免泄露。
  • 无状态性:JWT 无需服务端存储会话信息,适合分布式系统。

5.JWT 优点分析

JWT 相较于传统的基于会话(Session)的认证机制,具有以下优势:

  1. 无需服务器存储状态:传统的基于会话的认证机制需要服务器在会话中存储用户的状态信息,包括用户的登录状态、权限等。而使用 JWT,服务器无需存储任何会话状态信息,所有的认证和授权信息都包含在 JWT 中,使得系统可以更容易地进行水平扩展。
  2. 跨域支持:由于 JWT 包含了完整的认证和授权信息,因此可以轻松地在多个域之间进行传递和使用,实现跨域授权。
  3. 适应微服务架构:在微服务架构中,很多服务是独立部署并且可以横向扩展的,这就需要保证认证和授权的无状态性。使用 JWT 可以满足这种需求,每次请求携带 JWT 即可实现认证和授权。
  4. 自包含:JWT 包含了认证和授权信息,以及其他自定义的声明,这些信息都被编码在 JWT 中,在服务端解码后使用。JWT 的自包含性减少了对服务端资源的依赖,并提供了统一的安全机制。
  5. 扩展性:JWT 可以被扩展和定制,可以按照需求添加自定义的声明和数据,灵活性更高。

小结

JWT 是一种用于身份验证的开放标准,由 Header、Payload、Signature 组成。它的执行流程是:用户登录后生成加密令牌、客户端存储并在请求头携带、服务端验证签名和过期时间后授权。它的优点包括无状态、跨域支持、自包含性,适用于分布式系统和微服务架构,通过签名确保数据安全。

课后思考:JWT 过期后会怎样?如何实现自动续期?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:场景题、并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列等模块。

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

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

相关文章

【日记】文竹已经长得比路灯还要高了(1069 字)

正文最近陷入了一个深刻的情感漩涡。一边有些嫌恶爱情,一边又为它焦虑。一边觉得自己只有友谊已经足够了,一边又看见大多数友情并不能如爱情一般陪伴那样长的时间,不说二三十年,甚至不到十年可能便会消亡。觉得其实自己仍然需要它。然而目前这个不太喜欢、又需要一个东西的…

苹果使用AI让皮克斯的灯具复活了。

苹果让皮克斯著名的开场灯具复活,发布了一项新的研究,其中描述它的形容词并不是你通常会在AI研究中使用的那些。 这与我们习惯的一切都不同。它在技术上并不更聪明、更强大,也不是那些害怕AI的人噩梦般的存在。 相反,它似乎是科技巨头首次尝试以不同的方向提升AI和机器人智…

react-native-snap-carousel 轮播图卡在中间的问题

今天在使用react-native-snap-carousel组件的时候,发现一个问题,就是轮播有时候会卡在两个轮播图之间,不左不右的。研究了半天,才发现,开启动量滚动即可 关于enableMomentum的解释 enableMomentum 是 React Native 中 ScrollView 和 FlatList 组件的一个属性,用于控制滚动…

安川机器人维修JZRCR - YPP01 - 1示教器按键故障

在工业生产领域,安川机器人发挥着极为重要的作用。然而,像JZRCR - YPP01 - 1示教器按键出现故障这样的问题会影响机器人的正常运行。一、安川机器人JZRCR - YPP01 - 1示教器按键故障的初步检查外观检查首先,在进行任何深入维修之前,对示教器进行外观检查是必要的。检查按键…

Svelte 最新中文文档教程(13)—— 样式

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

数据结构选讲-1 总结

数据结构选讲-1 总结 线段树技巧及其应用。 前言 出题特点:树形 \(polylog\) 数据结构为主,尤其线段树。 侧重数据结构维护算法,使用数据结构进行统计。 强调“从具体情境中抽象出合适的数据及目标”的过程。数据结构本质上是要在数据和目标不变的情况下,优化算法复杂度,降…

Jenkins通过私钥连接Node

本文只要提供一种Jenkins通过私钥连接Node的方法。方法不区分Jenkins版本。大体步骤: (1)生成密钥对 (2)Jenkins上使用私钥配置Credentials (3)Node上配置authorized_keys 文件 (4)添加Node实例 下面演示一个实例。 需求:Jenkins通过私钥方式连接Node(app用户)(1)…

基于条件的访问控制——RBAC

网络威胁极为普遍,无论是公共组织还是私营组织,都面临着数据泄露的风险。一个拥有过多权限的账户,就足以让黑客渗透整个组织。为保护组织免受此类事件的影响,可以根据用户的角色和职责来分配权限。基于角色的访问控制(RBAC)便应运而生。 一、什么是基于条件的访问控制(R…

周界入侵智能识别摄像机

周界入侵智能识别摄像机持续捕捉监控区域内的视频流,并将数据实时传输至中央控制系统。目标检测与跟踪:采用深度学习算法,系统能够自动识别画面中的人、动物或其他物体,并对其进行跟踪分析。行为分析:系统通过对目标运动轨迹和行为模式的分析,判断是否存在异常活动。例如…

解锁零食店管理高效密码:精选工具助你制胜市场

零食集合店管理工具的选择对于提高店铺运营效率、优化库存管理、提升客户满意度等方面至关重要。以下是一些关键的零食集合店管理工具及其功能介绍: 一、门店管理软件 ● 板栗看板: 简单易用,适合小型团队使用。 ● Trello: 以看板形式组织任务,适合敏捷开发团队。 ● Asa…

负载均衡下的Webshell连接处理

免责声明 本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。最近打金融项目的时候,webshell遇见了负载均衡,自己之前其实看过相关文章,但是实战操作起来还是遇见了不少坑点的,接下来…

STAR: 利用时空注意力机制和动态频率损失的视频超分辨率增强框架

STAR (Spatial-Temporal Augmentation with Text-to-Video Models) 提出了一种创新的视频超分辨率解决方案,针对现有模型中存在的过度平滑和时间一致性不足等问题进行了系统性改进。该方法基于文本到视频(T2V)扩散模型架构,通过优化时序建模能力,有效处理复杂退化场景下的视…