mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix bug
This commit is contained in:
@@ -3,6 +3,7 @@ package cn.hutool.core.convert.impl;
|
|||||||
import cn.hutool.core.convert.AbstractConverter;
|
import cn.hutool.core.convert.AbstractConverter;
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.date.format.GlobalCustomFormat;
|
||||||
import cn.hutool.core.text.StrUtil;
|
import cn.hutool.core.text.StrUtil;
|
||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
|
|
||||||
@@ -156,7 +157,15 @@ public class TemporalAccessorConverter extends AbstractConverter {
|
|||||||
return IsoEra.of(Math.toIntExact(time));
|
return IsoEra.of(Math.toIntExact(time));
|
||||||
}
|
}
|
||||||
|
|
||||||
return parseFromInstant(targetClass, Instant.ofEpochMilli(time), null);
|
final Instant instant;
|
||||||
|
if(GlobalCustomFormat.FORMAT_SECONDS.equals(this.format)){
|
||||||
|
// https://gitee.com/dromara/hutool/issues/I6IS5B
|
||||||
|
// Unix时间戳
|
||||||
|
instant = Instant.ofEpochSecond(time);
|
||||||
|
}else{
|
||||||
|
instant = Instant.ofEpochMilli(time);
|
||||||
|
}
|
||||||
|
return parseFromInstant(targetClass, instant, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -18,7 +18,13 @@ import java.util.function.Function;
|
|||||||
*/
|
*/
|
||||||
public class GlobalCustomFormat {
|
public class GlobalCustomFormat {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式:秒时间戳(Unix时间戳)
|
||||||
|
*/
|
||||||
public static final String FORMAT_SECONDS = "#sss";
|
public static final String FORMAT_SECONDS = "#sss";
|
||||||
|
/**
|
||||||
|
* 格式:毫秒时间戳
|
||||||
|
*/
|
||||||
public static final String FORMAT_MILLISECONDS = "#SSS";
|
public static final String FORMAT_MILLISECONDS = "#SSS";
|
||||||
|
|
||||||
private static final Map<CharSequence, Function<Date, String>> formatterMap;
|
private static final Map<CharSequence, Function<Date, String>> formatterMap;
|
||||||
|
@@ -6,14 +6,24 @@ import cn.hutool.core.convert.Convert;
|
|||||||
import cn.hutool.core.convert.ConvertException;
|
import cn.hutool.core.convert.ConvertException;
|
||||||
import cn.hutool.core.convert.Converter;
|
import cn.hutool.core.convert.Converter;
|
||||||
import cn.hutool.core.convert.RegisterConverter;
|
import cn.hutool.core.convert.RegisterConverter;
|
||||||
import cn.hutool.core.convert.impl.*;
|
import cn.hutool.core.convert.impl.ArrayConverter;
|
||||||
|
import cn.hutool.core.convert.impl.CollectionConverter;
|
||||||
|
import cn.hutool.core.convert.impl.DateConverter;
|
||||||
|
import cn.hutool.core.convert.impl.MapConverter;
|
||||||
|
import cn.hutool.core.convert.impl.TemporalAccessorConverter;
|
||||||
import cn.hutool.core.map.MapWrapper;
|
import cn.hutool.core.map.MapWrapper;
|
||||||
import cn.hutool.core.reflect.ConstructorUtil;
|
import cn.hutool.core.reflect.ConstructorUtil;
|
||||||
import cn.hutool.core.reflect.TypeReference;
|
import cn.hutool.core.reflect.TypeReference;
|
||||||
import cn.hutool.core.reflect.TypeUtil;
|
import cn.hutool.core.reflect.TypeUtil;
|
||||||
import cn.hutool.core.text.StrUtil;
|
import cn.hutool.core.text.StrUtil;
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
import cn.hutool.json.*;
|
import cn.hutool.json.InternalJSONUtil;
|
||||||
|
import cn.hutool.json.JSON;
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
|
import cn.hutool.json.JSONConfig;
|
||||||
|
import cn.hutool.json.JSONException;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.hutool.json.serialize.JSONDeserializer;
|
import cn.hutool.json.serialize.JSONDeserializer;
|
||||||
import cn.hutool.json.serialize.JSONString;
|
import cn.hutool.json.serialize.JSONString;
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package cn.hutool.json.jwt;
|
package cn.hutool.json.jwt;
|
||||||
|
|
||||||
import cn.hutool.core.codec.BaseN.Base64;
|
import cn.hutool.core.codec.BaseN.Base64;
|
||||||
|
import cn.hutool.core.date.format.GlobalCustomFormat;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.json.JSONConfig;
|
import cn.hutool.json.JSONConfig;
|
||||||
@@ -21,7 +22,7 @@ public class Claims implements Serializable {
|
|||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
// 时间使用秒级时间戳表示
|
// 时间使用秒级时间戳表示
|
||||||
private final JSONConfig CONFIG = JSONConfig.of().setDateFormat("#sss");
|
private final JSONConfig CONFIG = JSONConfig.of().setDateFormat(GlobalCustomFormat.FORMAT_SECONDS);
|
||||||
|
|
||||||
private JSONObject claimJSON;
|
private JSONObject claimJSON;
|
||||||
|
|
||||||
|
@@ -0,0 +1,55 @@
|
|||||||
|
package cn.hutool.json.jwt;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.date.TimeUtil;
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* https://gitee.com/dromara/hutool/issues/I6IS5B
|
||||||
|
*/
|
||||||
|
public class IssueI6IS5BTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void payloadToBeanTest() {
|
||||||
|
final LocalDateTime iat = TimeUtil.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;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user