This commit is contained in:
Looly 2024-09-14 17:52:33 +08:00
parent 191339d91a
commit c328804fe5
4 changed files with 12 additions and 26 deletions

View File

@ -333,18 +333,7 @@ public class JWT implements RegisteredPayload<JWT> {
* @return JWT字符串 * @return JWT字符串
*/ */
public String sign() { public String sign() {
return sign(true); return sign(this.signer);
}
/**
* 签名生成JWT字符串
*
* @param addTypeIfNot 如果'typ'头不存在是否赋值默认值
* @return JWT字符串
* @since 5.8.24
*/
public String sign(final boolean addTypeIfNot) {
return sign(this.signer, addTypeIfNot);
} }
/** /**
@ -360,20 +349,11 @@ public class JWT implements RegisteredPayload<JWT> {
* </ul> * </ul>
* *
* @param signer 自定义JWT签名器非空 * @param signer 自定义JWT签名器非空
* @param addTypeIfNot 如果'typ'头不存在是否赋值默认值
* @return JWT字符串 * @return JWT字符串
*/ */
public String sign(final JWTSigner signer, final boolean addTypeIfNot) { public String sign(final JWTSigner signer) {
Assert.notNull(signer, () -> new JWTException("No Signer provided!")); Assert.notNull(signer, () -> new JWTException("No Signer provided!"));
// 检查tye信息
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); final String algorithm = (String) this.header.getClaim(JWTHeader.ALGORITHM);
if (StrUtil.isBlank(algorithm)) { if (StrUtil.isBlank(algorithm)) {

View File

@ -15,6 +15,9 @@
*/ */
/** /**
* JSON Web Token (JWT)封装 * JSON Web Token (JWT)封装<br>
* 规范见https://datatracker.ietf.org/doc/html/rfc7519
*
* @author Looly
*/ */
package org.dromara.hutool.json.jwt; package org.dromara.hutool.json.jwt;

View File

@ -13,12 +13,15 @@ public class Issue3732Test {
@Test @Test
void hmacTest() { void hmacTest() {
final JWTSigner SIGNER = JWTSignerUtil.hs256("6sf2f5j2a62a3s8f9032hsf".getBytes()); final JWTSigner SIGNER = JWTSignerUtil.hs256("6sf2f5j2a62a3s8f9032hsf".getBytes());
final Map<String, Object> headers = new HashMap<>();
headers.put("typ", "JWT");
final Map<String, Object> payload = new HashMap<>(); final Map<String, Object> payload = new HashMap<>();
payload.put("name", "test"); payload.put("name", "test");
payload.put("role", "admin"); payload.put("role", "admin");
// 创建 JWT token // 创建 JWT token
final String token = JWTUtil.createToken(payload, SIGNER); final String token = JWTUtil.createToken(headers, payload, SIGNER);
assertEquals("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYWRtaW4iLCJuYW1lIjoidGVzdCJ9.pD3Xz41rtXvU3G1c_yS7ir01FXmDvtjjAOU2HYd8MdA", token); assertEquals("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiYWRtaW4iLCJuYW1lIjoidGVzdCJ9.pD3Xz41rtXvU3G1c_yS7ir01FXmDvtjjAOU2HYd8MdA", token);
} }
} }

View File

@ -185,7 +185,7 @@ public class JWTTest {
final Map<String, Object> map = new HashMap<>(); final Map<String, Object> map = new HashMap<>();
map.put("test2", 22222222222222L); map.put("test2", 22222222222222L);
final JWTSigner jwtSigner = JWTSignerUtil.createSigner(AlgorithmUtil.getAlgorithm("HS256"), Base64.getDecoder().decode("abcdefghijklmn")); final JWTSigner jwtSigner = JWTSignerUtil.createSigner(AlgorithmUtil.getAlgorithm("HS256"), Base64.getDecoder().decode("abcdefghijklmn"));
final String sign = JWT.of().addPayloads(map).sign(jwtSigner, true); final String sign = JWT.of().addPayloads(map).sign(jwtSigner);
final Object test2 = JWT.of(sign).getPayload().getClaim("test2"); final Object test2 = JWT.of(sign).getPayload().getClaim("test2");
Assertions.assertEquals(Long.class, test2.getClass()); Assertions.assertEquals(Long.class, test2.getClass());
} }