java.lang.Object
org.miaixz.bus.auth.metric.JWT
- All Implemented Interfaces:
JWTRegister<JWT>
JSON Web Token (JWT) 实现类,基于 RFC 7519 标准,用于在网络应用间传递声明。
- header:声明签名算法等信息
- payload:承载声明和明文数据
- signature:签名部分(JWS),确保数据完整性
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Field Summary
Fields inherited from interface org.miaixz.bus.auth.metric.jwt.JWTRegister
AUDIENCE, EXPIRES_AT, ISSUED_AT, ISSUER, JWT_ID, NOT_BEFORE, SUBJECT -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddHeaders(Map<String, ?> headers) 添加多个头部信息。addPayloads(Map<String, ?> payloads) 添加多个载荷信息。获取算法 ID(alg)头部信息。获取头部对象。获取指定头部信息。获取所有头部信息。获取载荷对象。getPayload(String name) 获取指定载荷信息。<T> TgetPayload(String propertyName, Type propertyType) 获取指定载荷信息并转换为指定类型。获取所有载荷信息。org.miaixz.bus.auth.metric.jwt.signature.JWTSigner获取签名器。static JWTof()创建空的 JWT 对象。static JWT创建并解析 JWT 对象。解析 JWT 令牌字符串,分解为 header、payload 和 signature 三部分。setCharset(Charset charset) 设置 JWT 使用的字符编码。设置头部信息。setKey(byte[] key) 设置签名密钥,默认使用 HS256 (HmacSHA256) 算法。setPayload(String name, Object value) 设置载荷信息。设置签名算法和密钥。设置签名算法和密钥。设置非对称签名算法和密钥对。setSigner(org.miaixz.bus.auth.metric.jwt.signature.JWTSigner signer) 设置签名器。sign()使用默认签名器生成 JWT 字符串。sign(org.miaixz.bus.auth.metric.jwt.signature.JWTSigner signer) 使用指定签名器生成 JWT 字符串splitToken(String token) 将 JWT 令牌字符串拆分为三部分(header, payload, signature)。booleanvalidate(long leeway) 验证 JWT 令牌是否有效,包括签名和时间字段检查。booleanverify()验证 JWT 令牌是否有效。booleanverify(org.miaixz.bus.auth.metric.jwt.signature.JWTSigner signer) 使用指定签名器验证 JWT 令牌。Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.miaixz.bus.auth.metric.jwt.JWTRegister
setAudience, setExpiresAt, setIssuedAt, setIssuer, setJWTId, setNotBefore, setSubject
-
Constructor Details
-
JWT
public JWT()构造函数,初始化空的 JWT 对象,设置默认编码为 UTF-8。 -
JWT
构造函数,初始化并解析 JWT 令牌。- Parameters:
token- JWT 令牌字符串
-
-
Method Details
-
of
创建空的 JWT 对象。- Returns:
- 新的 JWT 实例
-
of
创建并解析 JWT 对象。- Parameters:
token- JWT 令牌字符串,格式为 xxxx.yyyy.zzzz- Returns:
- 解析后的 JWT 实例
- Throws:
IllegalArgumentException- 如果令牌为空
-
parse
解析 JWT 令牌字符串,分解为 header、payload 和 signature 三部分。- Parameters:
token- JWT 令牌字符串- Returns:
- 当前 JWT 实例
- Throws:
IllegalArgumentException- 如果令牌为空或格式不正确
-
setCharset
设置 JWT 使用的字符编码。- Parameters:
charset- 字符编码- Returns:
- 当前 JWT 实例
-
setKey
设置签名密钥,默认使用 HS256 (HmacSHA256) 算法。- Parameters:
key- 签名密钥- Returns:
- 当前 JWT 实例
-
setSigner
设置签名算法和密钥。- Parameters:
algorithmId- 签名算法 ID(如 HS256)key- 签名密钥- Returns:
- 当前 JWT 实例
-
setSigner
设置签名算法和密钥。- Parameters:
algorithmId- 签名算法 ID(如 HS256)key- 签名密钥- Returns:
- 当前 JWT 实例
-
setSigner
设置非对称签名算法和密钥对。- Parameters:
algorithmId- 签名算法 ID(如 RS256)keyPair- 密钥对- Returns:
- 当前 JWT 实例
-
setSigner
设置签名器。- Parameters:
signer- 签名器- Returns:
- 当前 JWT 实例
-
getSigner
public org.miaixz.bus.auth.metric.jwt.signature.JWTSigner getSigner()获取签名器。- Returns:
- 当前使用的签名器
-
getHeaders
获取所有头部信息。- Returns:
- 头部信息的 Map
-
getHeader
获取头部对象。- Returns:
- JWTHeader 实例
-
getHeader
获取指定头部信息。- Parameters:
name- 头部字段名称- Returns:
- 头部字段值
-
getAlgorithm
获取算法 ID(alg)头部信息。- Returns:
- 算法 ID
- See Also:
-
setHeader
设置头部信息。- Parameters:
name- 头部字段名称value- 头部字段值- Returns:
- 当前 JWT 实例
-
addHeaders
添加多个头部信息。- Parameters:
headers- 头部信息 Map- Returns:
- 当前 JWT 实例
-
getPayloads
获取所有载荷信息。- Returns:
- 载荷信息的 Map
-
getPayload
获取载荷对象。- Returns:
- JWTPayload 实例
-
getPayload
获取指定载荷信息。- Parameters:
name- 载荷字段名称- Returns:
- 载荷字段值
-
getPayload
获取指定载荷信息并转换为指定类型。- Type Parameters:
T- 目标类型- Parameters:
propertyName- 载荷字段名称propertyType- 目标类型- Returns:
- 转换后的载荷字段值,或 null 如果无法转换
-
setPayload
设置载荷信息。- Specified by:
setPayloadin interfaceJWTRegister<JWT>- Parameters:
name- 载荷字段名称value- 载荷字段值- Returns:
- 当前 JWT 实例
-
addPayloads
添加多个载荷信息。- Parameters:
payloads- 载荷信息 Map- Returns:
- 当前 JWT 实例
-
sign
使用默认签名器生成 JWT 字符串。- Returns:
- JWT 字符串(header.payload.signature)
-
sign
使用指定签名器生成 JWT 字符串自动补充头部信息:
- 若未定义 "alg",根据签名器设置算法 ID
- Parameters:
signer- 签名器- Returns:
- JWT 字符串
- Throws:
org.miaixz.bus.core.lang.exception.JWTException- 如果签名器为 null
-
verify
public boolean verify()验证 JWT 令牌是否有效。- Returns:
- true 如果签名有效,否则 false
-
validate
public boolean validate(long leeway) 验证 JWT 令牌是否有效,包括签名和时间字段检查。检查内容:
- 签名是否有效
- notBefore:生效时间不能晚于当前时间
- expiresAt:失效时间不能早于当前时间
- issuedAt:签发时间不能晚于当前时间
- Parameters:
leeway- 容忍时间(秒),用于时间检查的宽松度- Returns:
- true 如果令牌有效,否则 false
-
verify
public boolean verify(org.miaixz.bus.auth.metric.jwt.signature.JWTSigner signer) 使用指定签名器验证 JWT 令牌。如果签名器为 null 或 NoneJWTSigner,则认为 JWT 无签名,签名部分必须为空。
- Parameters:
signer- 签名器,null 时默认为无签名- Returns:
- true 如果签名有效,否则 false
- Throws:
org.miaixz.bus.core.lang.exception.JWTException- 如果没有可验证的令牌
-
splitToken
将 JWT 令牌字符串拆分为三部分(header, payload, signature)。- Parameters:
token- JWT 令牌字符串- Returns:
- 包含三部分的 List
- Throws:
org.miaixz.bus.core.lang.exception.JWTException- 如果令牌格式不正确(不是三部分)
-