JWT的概念

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间安全地传输信息。它特别适用于身份验证授权场景。


🎯JWT 的核心组成

JWT 由三部分组成,格式为:Header.Payload.Signature

1. Header(头部)

{ "alg": "HS256", // 签名算法(HMAC SHA256) "typ": "JWT" // 令牌类型 }
  • Base64Url 编码后形成第一部分

2. Payload(负载/声明)

包含实际的用户数据和其他信息:

{ "sub": "1234567890", // 主题(用户ID) "name": "John Doe", // 自定义声明 "iat": 1516239022, // 签发时间 "exp": 1516242622 // 过期时间 }

3. Signature(签名)

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
  • 防止数据被篡改

📦一个完整的 JWT 示例

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. // Header eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. // Payload SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c // Signature

JWT 在 Java 中的使用

常用 Java JWT 库

  1. jjwt(最流行)
  2. Java JWT(Auth0)
  3. Nimbus JWT

Maven 依赖(jjwt 示例)

<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency>

💻Java 代码示例

1. 创建 JWT

import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; public class JwtUtil { private static final String SECRET_KEY = "mySecretKey123!@#"; private static final long EXPIRATION_TIME = 86400000; // 24小时 public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } }

2. 验证和解析 JWT

public static boolean validateToken(String token) { try { Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token); return true; } catch (Exception e) { return false; } } public static String getUsernameFromToken(String token) { return Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody() .getSubject(); }

🔐JWT 在 Web 应用中的典型流程

客户端 → 登录请求 → 服务器 ↓ 验证用户名密码 ↓ 生成JWT返回给客户端 ↓ 客户端 → 后续请求携带JWT(Authorization头) ↓ 服务器验证JWT ↓ 返回受保护资源

HTTP 请求头示例

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

JWT 的优点

优点说明
无状态服务器不需要存储session,适合分布式系统
跨域友好适合前后端分离、微服务架构
自包含令牌包含所有必要信息,减少数据库查询
标准化行业标准,各种语言都有成熟库

⚠️JWT 的注意事项

安全问题

  1. 不要存储敏感信息(密码等)
  2. 设置合理的过期时间
  3. 使用 HTTPS防止令牌被截获
  4. 签名密钥要足够复杂

性能考虑

// JWT 一旦签发就不可撤销 // 如果需要即时失效,需要额外方案: // 1. 短过期时间 + 刷新令牌 // 2. 黑名单机制 // 3. 每次验证查库(会失去无状态优势)

🆚JWT vs Session

对比项JWTSession
存储位置客户端服务器端
跨域支持需要额外配置
扩展性好(无状态)一般(需要共享session)
安全性依赖签名依赖session管理
撤销机制复杂简单

📊实际应用场景

Spring Boot 集成示例

@Configuration public class JwtConfig { @Bean public JwtUtil jwtUtil() { return new JwtUtil(); } } @RestController @RequestMapping("/api/auth") public class AuthController { @PostMapping("/login") public ResponseEntity<?> login(@RequestBody LoginRequest request) { // 验证用户 if (authenticate(request)) { String token = jwtUtil.generateToken(request.getUsername()); return ResponseEntity.ok(new AuthResponse(token)); } return ResponseEntity.status(401).build(); } }

拦截器验证

@Component public class JwtInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String token = request.getHeader("Authorization"); if (token != null && token.startsWith("Bearer ")) { token = token.substring(7); if (jwtUtil.validateToken(token)) { request.setAttribute("username", jwtUtil.getUsernameFromToken(token)); return true; } } response.setStatus(401); return false; } }

📚最佳实践总结

  1. 使用安全的签名算法(HS256, RS256)
  2. 令牌有效期尽量短(15-30分钟为佳)
  3. 实现刷新令牌机制
  4. 存储在安全的地方(HttpOnly cookies)
  5. 处理令牌泄露(黑名单或短有效期)
  6. 避免在URL中传递(防止日志泄露)

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

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

相关文章

强烈安利9个AI论文软件,专科生搞定毕业论文不求人!

强烈安利9个AI论文软件&#xff0c;专科生搞定毕业论文不求人&#xff01; AI 工具如何让论文写作变得轻松高效 对于专科生来说&#xff0c;毕业论文往往是一道难以逾越的门槛。从选题到撰写&#xff0c;再到查重降重&#xff0c;每一个环节都可能让人感到焦虑和压力。而随着…

零基础冲执业药师证!2026高性价比培训机构推荐,选对少走一年弯路

零基础冲执业药师证!2026高性价比培训机构推荐,选对少走一年弯路一、引言:零基础考执业药师,选对培训 = 成功一半 在医药行业蓬勃发展的当下,执业药师证书的含金量日益凸显,它不仅是进入该行业的敲门砖,更是职业…

Java毕设项目:基于springboot的绍兴旅游系统(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026年专业测评:淘宝代运营公司排名前五权威榜单

2026年专业深度测评:淘宝代运营公司排名前五权威榜单 随着电商行业进入存量竞争与精细化运营时代,品牌方对专业、高效、可量化的淘宝代运营服务需求持续攀升。面对市场上服务商能力参差不齐的现状,选择一家具备深厚…

NR QCL与 TCI

QCL 定义QCL(Quasi Co-Location)定义为准共站址。指某个天线端口上的符号所 经历的信道大尺度衰落可以从另一个天线端口的符号所经历的信道推断出来。很多文章都会介绍该部分内容但是如果对接收机的实现不是很了解的话都会有一个问题:这个是干什么用的? 实际上前面很多文章都已…

VR看房拍摄方法及服务商全面盘点:技术路径/市场格局等核心能力深度解析

引言&#xff1a;当VR成为房产营销的“新基建” 在数字化浪潮的席卷下&#xff0c;房地产行业正经历一场深刻的体验革命。传统依赖图文、视频的二维展示方式&#xff0c;因无法传递真实的空间尺度与细节&#xff0c;导致客户看房满意度低、决策周期长。异地看房的地理限制、线…

cf div2 1073 D1,D2

算是寒假的第一把 cf,被这道题意极其绕的两个题困扰了许久,遂写题解记录思考过程。 D1. Sub-RBS (Easy Version) 意外的是,赛时写出的代码竟然与官解思路是一模一样的。但其实发现还可以转化成一个更强的结论,这也…

Java计算机毕设之基于springboot的绍兴旅游攻略分享系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

P4568 飞行路线

点击查看代码 #include<bits/stdc++.h> using namespace std;const int N=10010,M=100010,K=15; int h[N],ne[M],e[M],idx,w[M]; int dist[N][K]; int st[N][K]; int n,m,k; int s,t;void add(int a,int b,int c…

护考软件千千万,选错真的会挂科!2026最新避坑指南(含排行榜)

每年护考成绩出来,总有人后悔:“早知道就不乱用那个盗版题库了,好多题答案都是错的!” 2026年护考备考已经拉开帷幕,市面上的刷题APP五花八门。有的收费死贵,有的题库万年不更。为了让大家少走弯路,我自费测评了…

Windows快捷命令集合

Windows快捷命令集合1. systeminfo : 显示系统详细信息(安装日期/补丁/内存/系统版本) 2. sfc /scannow:扫描并修复系统文件损坏【需管理员权限】 3. chkdsk /f:检查磁盘错误并修复【需重启】【需管理员权限】 4. …

别乱报班!2026执业药师高性价比培训TOP5实测(附避坑)

别乱报班!2026执业药师高性价比培训TOP5实测(附避坑)一、开篇:执业药师备考痛点直击,选对机构事半功倍 1低通过率 + 多重备考难点,机构选择成通关关键 2024 年执业药师考试成绩公布后,其全国 21.04% 的通过率数…

当经典男装遇见先知AI:一场关于“品味”的效率革命

经典男装追求历久弥新的质感与品味&#xff0c;但其营销传播却不得不面对瞬息万变的数字媒体环境。如何高效产出既保持品牌调性&#xff0c;又能引发当代共鸣的优美文案&#xff1f;北京先智先行科技有限公司推出的“先知大模型”、“先行AI商学院”与“先知AIGC超级工场”&…

突发,Deepseek新模型MODEL1曝光!

作为明星产品&#xff0c;必须得用放大镜看&#xff01;正值DeepSeek-R1 发布一周年之际&#xff0c;DeepSeek 在 GitHub 上悄悄更新了一波代码。结果&#xff0c;眼尖的开发者在 DeepSeek 核心的推理优化库 FlashMLA 中&#xff0c;发现了一个此前从未公开过的神秘代号&#x…

内容、媒体、时间:详解影响软文收录的三大变量及优化策略

在信息爆炸的时代&#xff0c;软文收录成为品牌传播效果的关键。许多企业常困惑于文章未被收录&#xff0c;其实这取决于内容质量、媒体选择与发布时机三大变量的系统配合。本文将解析这三大变量&#xff0c;并提供优化策略&#xff0c;助力软文传播效果最大化。 一、内容变量&…

dwmredir.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

【毕业设计】基于springboot的面向大学生的职业兴趣评估与就业指导平台(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java计算机毕设之基于springboot的企业内部知识产权管理系统基于SpringBoot+Vue的企业内部知识产权管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于springboot的企业内部知识产权管理系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

RAG 检索模型如何学习:三种损失函数的机制解析

Agent 系统发展得这么快那么检索模型还重要吗&#xff1f;RAG 本身都已经衍生出 Agentic RAG和 Self-RAG&#xff08;这些更复杂的变体了。 答案是肯定的&#xff0c;无论 Agent 方法在效率和推理上做了多少改进&#xff0c;底层还是离不开检索。检索模型越准&#xff0c;需要…