From 9c0f791ac545582fb8f92d6f9516a6b49ca514df Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 15 Nov 2023 19:08:31 +0800 Subject: [PATCH] =?UTF-8?q?JWT#sign=E5=A2=9E=E5=8A=A0=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E9=80=89=E6=98=AF=E5=90=A6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=9A=84typ=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +- .../src/main/java/cn/hutool/jwt/JWT.java | 35 ++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index adeedf528..8f600f77d 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,11 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.24(2023-11-14) +# 5.8.24(2023-11-15) ### 🐣新特性 * 【cache 】 Cache增加get重载,可自定义超时时间(issue#I8G0DL@Gitee) +* 【cache 】 JWT#sign增加重载,可选是否增加默认的typ参数(issue#3386@Github) ### 🐞Bug修复 * 【core 】 修复LocalDateTime#parseDate未判断空问题问题(issue#I8FN7F@Gitee) diff --git a/hutool-jwt/src/main/java/cn/hutool/jwt/JWT.java b/hutool-jwt/src/main/java/cn/hutool/jwt/JWT.java index e7214aa48..1d511d74c 100755 --- a/hutool-jwt/src/main/java/cn/hutool/jwt/JWT.java +++ b/hutool-jwt/src/main/java/cn/hutool/jwt/JWT.java @@ -302,7 +302,18 @@ public class JWT implements RegisteredPayload { * @return JWT字符串 */ public String sign() { - return sign(this.signer); + return sign(true); + } + + /** + * 签名生成JWT字符串 + * + * @param addTypeIfNot 如果'typ'头不存在,是否赋值默认值 + * @return JWT字符串 + * @since 5.8.24 + */ + public String sign(boolean addTypeIfNot) { + return sign(this.signer, addTypeIfNot); } /** @@ -312,19 +323,33 @@ public class JWT implements RegisteredPayload { * @return JWT字符串 */ public String sign(JWTSigner signer) { + return sign(signer, true); + } + + /** + * 签名生成JWT字符串 + * + * @param signer JWT签名器 + * @param addTypeIfNot 如果'typ'头不存在,是否赋值默认值 + * @return JWT字符串 + * @since 5.8.24 + */ + public String sign(JWTSigner signer, boolean addTypeIfNot) { Assert.notNull(signer, () -> new JWTException("No Signer provided!")); // 检查tye信息 - final String type = (String) this.header.getClaim(JWTHeader.TYPE); - if (StrUtil.isBlank(type)) { - this.header.setClaim(JWTHeader.TYPE, "JWT"); + if (addTypeIfNot) { + final String type = (String) this.header.getClaim(JWTHeader.TYPE); + if (StrUtil.isBlank(type)) { + this.header.setClaim(JWTHeader.TYPE, "JWT"); + } } // 检查头信息中是否有算法信息 final String algorithm = (String) this.header.getClaim(JWTHeader.ALGORITHM); if (StrUtil.isBlank(algorithm)) { this.header.setClaim(JWTHeader.ALGORITHM, - AlgorithmUtil.getId(signer.getAlgorithm())); + AlgorithmUtil.getId(signer.getAlgorithm())); } final String headerBase64 = Base64.encodeUrlSafe(this.header.toString(), charset);