当前位置: 首页 > news >正文

JJWT 核心工具类 Jwts 源码解析

1. 类概述

Jwts 类是 JJWT 库的工厂类,提供了创建 JWT 相关组件(Header、Claims、Builder、Parser)的静态方法。它是一个不可实例化的工具类,所有方法都是静态的。

public final class Jwts {private Jwts() {} // 私有构造器防止实例化
}

 

 

2. 核心方法解析

2.1 Header 相关方法

作用

  • 创建 JWT 头部信息

  • Header 是通用头部接口

  • JwsHeader 是带签名的 JWT 头部,扩展了 Header 接口

// 创建默认Header
public static Header header() {return new DefaultHeader();
}// 从现有Map创建Header
public static Header header(Map<String, Object> header) {return new DefaultHeader(header);
}// 创建JWS Header (带签名)
public static JwsHeader jwsHeader() {return new DefaultJwsHeader();
}// 从现有Map创建JWS Header
public static JwsHeader jwsHeader(Map<String, Object> header) {return new DefaultJwsHeader(header);
}

 2.2 Claims 相关方法

 

// 创建空的Claims
public static Claims claims() {return new DefaultClaims();
}// 从现有Map创建Claims
public static Claims claims(Map<String, Object> claims) {return new DefaultClaims(claims);
}

作用

  • 创建 JWT 的载荷部分(claims)

  • Claims 接口扩展了 Map<String, Object>,提供了一些标准 claim 的便捷方法

2.3 Parser 和 Builder

// 创建JWT解析器
public static JwtParser parser() {return new DefaultJwtParser();
}// 创建JWT构建器
public static JwtBuilder builder() {return new DefaultJwtBuilder();
}

 

作用

  • JwtParser 用于解析和验证 JWT

  • JwtBuilder 用于构建新的 JWT

 

3. 设计模式分析

3.1 工厂模式

Jwts 类是一个典型的静态工厂类,提供了创建各种 JWT 组件的统一入口。

优点:

  • 隐藏具体实现类(DefaultHeaderDefaultClaims等)

  • 简化客户端代码

  • 便于未来实现类的替换

3.2 不可变对象

从方法签名可以看出,大多数方法返回的都是接口类型(HeaderClaims等),而不是具体实现类。这种设计:

  • 遵循面向接口编程原则

  • 隐藏实现细节

  • 便于扩展和维护

4. 典型使用示例

4.1 创建 JWT

 4.2 解析 JWT

5.扩展性考虑

如果需要扩展功能,可以:

  1. 实现自己的 Header 或 Claims 实现

  2. 通过 header(Map) 或 claims(Map) 方法传入自定义实现

  3. 创建自定义的 JwtParser 或 JwtBuilder 实现

这种设计使得 JJWT 库既提供了开箱即用的功能,又保持了足够的扩展性。

 

http://www.xdnf.cn/news/1233091.html

相关文章:

  • 高效离线转换方案:支持多任务并行处理
  • 通俗易懂解释Java8 HashMap
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量
  • 一种基于入侵杂草优化算法(IWO)的聚类算法,并与K-Means、高斯混合模型(GMM)进行对比,Matlab
  • 内存、硬盘与缓存的技术原理及特性解析
  • 系统性学习数据结构-第一讲-算法复杂度
  • 疯狂星期四文案网第27天运营日记
  • sc-atac的基础知识(0)
  • 兴达餐饮 酒店 进销存管理系统软件
  • SPI通信中CS片选的两种实现方案:硬件片选与软件片选
  • 跨语言AI服务指标收集实战
  • Java试题-选择题(6)
  • SmartCLIP:具有识别保证的模块化视觉-语言对齐
  • 烽火HG680-KD_海思MV320处理器-安卓9-原厂系统升级包-针对解决烧录不进系统的问题
  • i Battery Box V3.7 客户端电池检测仪
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第8章 备份与恢复
  • MC0364魔法链路
  • 零基础 “入坑” Java--- 十六、字符串String 异常
  • [硬件电路-121]:模拟电路 - 信号处理电路 - 模拟电路中常见的难题
  • ubuntu22.04离线一键安装gpu版docker
  • [Linux入门] Ubuntu 系统中 iptables 的配置与使用
  • 【Django】-4- 数据库存储和管理
  • 【Python修仙编程】(二) Python3灵源初探(11)
  • RAWINPUT避坑指南(涉及GetRawInputData/GetRawInputBuffer)
  • 【智能体cooragent】创建 workflow 时 候选 Agent 和 Tool 获取来源详细分析
  • 深入 Go 底层原理(六):垃圾回收(GC)
  • Kafka——关于Kafka动态配置
  • 洛谷 P3870 [TJOI2009] 开关-普及+/提高
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第7章 事务
  • 【Java】在一个前台界面中动态展示多个数据表的字段及数据