This commit is contained in:
Looly
2023-03-03 22:12:51 +08:00
parent a717d03420
commit 2cdce52d4a
5 changed files with 80 additions and 5 deletions

View File

@@ -1,6 +1,7 @@
package cn.hutool.jwt;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.format.GlobalCustomFormat;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.json.JSONConfig;
@@ -21,7 +22,7 @@ public class Claims implements Serializable {
private static final long serialVersionUID = 1L;
// 时间使用秒级时间戳表示
private final JSONConfig CONFIG = JSONConfig.create().setDateFormat("#sss");
private final JSONConfig CONFIG = JSONConfig.create().setDateFormat(GlobalCustomFormat.FORMAT_SECONDS);
private JSONObject claimJSON;
@@ -43,9 +44,10 @@ public class Claims implements Serializable {
/**
* 加入多个Claims属性
*
* @param headerClaims 多个Claims属性
*/
protected void putAll(Map<String, ?> headerClaims){
protected void putAll(Map<String, ?> headerClaims) {
if (MapUtil.isNotEmpty(headerClaims)) {
for (Map.Entry<String, ?> entry : headerClaims.entrySet()) {
setClaim(entry.getKey(), entry.getValue());
@@ -90,8 +92,8 @@ public class Claims implements Serializable {
return this.claimJSON.toString();
}
private void init(){
if(null == this.claimJSON){
private void init() {
if (null == this.claimJSON) {
this.claimJSON = new JSONObject(CONFIG);
}
}

View File

@@ -0,0 +1,51 @@
package cn.hutool.jwt;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.Data;
import org.junit.Assert;
import org.junit.Test;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.Date;
public class IssueI6IS5BTest {
@Test
public void payloadToBeanTest() {
final LocalDateTime iat = LocalDateTimeUtil.of(DateUtil.parse("2023-03-03"));
final JwtToken jwtToken = new JwtToken();
jwtToken.setIat(iat);
final String token = JWTUtil.createToken(JSONUtil.parseObj(jwtToken), "123".getBytes(StandardCharsets.UTF_8));
Assert.assertEquals("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2Nzc3NzI4MDB9.SXU_mm1wT5lNoK-Dq5Y8f3BItv_44zuAlyeWLqajpXg", token);
final JSONObject payloads = JWTUtil.parseToken(token).getPayloads();
Assert.assertEquals("{\"iat\":1677772800}", payloads.toString());
final JwtToken o = payloads.toBean(JwtToken.class);
Assert.assertEquals(iat, o.getIat());
}
@Data
static class JwtToken {
private LocalDateTime iat;
}
@Test
public void payloadToBeanTest2() {
final Date iat = DateUtil.parse("2023-03-03");
final JwtToken2 jwtToken = new JwtToken2();
jwtToken.setIat(iat);
final String token = JWTUtil.createToken(JSONUtil.parseObj(jwtToken), "123".getBytes(StandardCharsets.UTF_8));
Assert.assertEquals("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2Nzc3NzI4MDB9.SXU_mm1wT5lNoK-Dq5Y8f3BItv_44zuAlyeWLqajpXg", token);
final JSONObject payloads = JWTUtil.parseToken(token).getPayloads();
Assert.assertEquals("{\"iat\":1677772800}", payloads.toString());
final JwtToken2 o = payloads.toBean(JwtToken2.class);
Assert.assertEquals(iat, o.getIat());
}
@Data
static class JwtToken2 {
private Date iat;
}
}