mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
add BeanPath
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
|
||||
package org.dromara.hutool.json;
|
||||
|
||||
import org.dromara.hutool.core.bean.BeanPathOld;
|
||||
import org.dromara.hutool.core.bean.path.BeanPath;
|
||||
import org.dromara.hutool.core.convert.ConvertException;
|
||||
import org.dromara.hutool.core.convert.Converter;
|
||||
import org.dromara.hutool.core.lang.mutable.MutableEntry;
|
||||
@@ -64,11 +64,11 @@ public interface JSON extends Converter, Cloneable, Serializable {
|
||||
*
|
||||
* @param expression 表达式
|
||||
* @return 对象
|
||||
* @see BeanPathOld#get(Object)
|
||||
* @see BeanPath#getValue(Object)
|
||||
* @since 4.0.6
|
||||
*/
|
||||
default Object getByPath(final String expression) {
|
||||
return BeanPathOld.of(expression).get(this);
|
||||
return BeanPath.of(expression).getValue(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -93,7 +93,7 @@ public interface JSON extends Converter, Cloneable, Serializable {
|
||||
* @param value 值
|
||||
*/
|
||||
default void putByPath(final String expression, final Object value) {
|
||||
BeanPathOld.of(expression).set(this, value);
|
||||
BeanPath.of(expression).setValue(this, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -118,11 +118,11 @@ public interface JSON extends Converter, Cloneable, Serializable {
|
||||
* @param expression 表达式
|
||||
* @param resultType 返回值类型
|
||||
* @return 对象
|
||||
* @see BeanPathOld#get(Object)
|
||||
* @see BeanPath#getValue(Object)
|
||||
* @since 4.0.6
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
default <T> T getByPath(final String expression, final Type resultType){
|
||||
default <T> T getByPath(final String expression, final Type resultType) {
|
||||
return (T) config().getConverter().convert(resultType, getByPath(expression));
|
||||
}
|
||||
|
||||
|
@@ -340,7 +340,7 @@ public class JWT implements RegisteredPayload<JWT> {
|
||||
*
|
||||
* <p>此方法会补充如下的header:</p>
|
||||
* <ul>
|
||||
* <li>当用户未定义"typ"时,赋默认值:"JWT"</li>
|
||||
* <li>当用户未定义"typ"时,不设置默认值</li>
|
||||
* <li>当用户未定义"alg"时,根据传入的{@link JWTSigner}对象类型,赋值对应ID</li>
|
||||
* </ul>
|
||||
*
|
||||
@@ -350,12 +350,6 @@ public class JWT implements RegisteredPayload<JWT> {
|
||||
public String sign(final JWTSigner signer) {
|
||||
Assert.notNull(signer, () -> new JWTException("No Signer provided!"));
|
||||
|
||||
// 检查tye信息
|
||||
final String type = (String) this.header.getClaim(JWTHeader.TYPE);
|
||||
if (StrUtil.isBlank(type)) {
|
||||
this.header.setType("JWT");
|
||||
}
|
||||
|
||||
// 检查头信息中是否有算法信息
|
||||
final String algorithm = (String) this.header.getClaim(JWTHeader.ALGORITHM);
|
||||
if (StrUtil.isBlank(algorithm)) {
|
||||
|
@@ -12,6 +12,7 @@
|
||||
|
||||
package org.dromara.hutool.json.jwt;
|
||||
|
||||
import org.dromara.hutool.core.map.MapUtil;
|
||||
import org.dromara.hutool.json.jwt.signers.JWTSigner;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -29,7 +30,7 @@ public class JWTUtil {
|
||||
* @return JWT Token
|
||||
*/
|
||||
public static String createToken(final Map<String, Object> payload, final byte[] key) {
|
||||
return createToken(null, payload, key);
|
||||
return createToken(MapUtil.of(JWTHeader.TYPE, "JWT"), payload, key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -27,18 +27,19 @@ import java.util.*;
|
||||
public class JWTTest {
|
||||
|
||||
@Test
|
||||
public void createHs256Test(){
|
||||
public void createHs256Test() {
|
||||
final byte[] key = "1234567890".getBytes();
|
||||
final JWT jwt = JWT.of()
|
||||
.setPayload("sub", "1234567890")
|
||||
.setPayload("name", "looly")
|
||||
.setPayload("admin", true)
|
||||
.setExpiresAt(DateUtil.parse("2022-01-01"))
|
||||
.setKey(key);
|
||||
.setHeader(JWTHeader.TYPE, "JWT")
|
||||
.setPayload("sub", "1234567890")
|
||||
.setPayload("name", "looly")
|
||||
.setPayload("admin", true)
|
||||
.setExpiresAt(DateUtil.parse("2022-01-01"))
|
||||
.setKey(key);
|
||||
|
||||
final String rightToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." +
|
||||
"eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Imxvb2x5IiwiYWRtaW4iOnRydWUsImV4cCI6MTY0MDk2NjQwMH0." +
|
||||
"bXlSnqVeJXWqUIt7HyEhgKNVlIPjkumHlAwFY-5YCtk";
|
||||
"eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Imxvb2x5IiwiYWRtaW4iOnRydWUsImV4cCI6MTY0MDk2NjQwMH0." +
|
||||
"bXlSnqVeJXWqUIt7HyEhgKNVlIPjkumHlAwFY-5YCtk";
|
||||
|
||||
final String token = jwt.sign();
|
||||
Assertions.assertEquals(rightToken, token);
|
||||
@@ -47,10 +48,10 @@ public class JWTTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseTest(){
|
||||
public void parseTest() {
|
||||
final String rightToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." +
|
||||
"eyJzdWIiOiIxMjM0NTY3ODkwIiwiYWRtaW4iOnRydWUsIm5hbWUiOiJsb29seSJ9." +
|
||||
"U2aQkC2THYV9L0fTN-yBBI7gmo5xhmvMhATtu8v0zEA";
|
||||
"eyJzdWIiOiIxMjM0NTY3ODkwIiwiYWRtaW4iOnRydWUsIm5hbWUiOiJsb29seSJ9." +
|
||||
"U2aQkC2THYV9L0fTN-yBBI7gmo5xhmvMhATtu8v0zEA";
|
||||
|
||||
final JWT jwt = JWT.of(rightToken);
|
||||
|
||||
@@ -68,15 +69,16 @@ public class JWTTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createNoneTest(){
|
||||
public void createNoneTest() {
|
||||
final JWT jwt = JWT.of()
|
||||
.setPayload("sub", "1234567890")
|
||||
.setPayload("name", "looly")
|
||||
.setPayload("admin", true)
|
||||
.setSigner(JWTSignerUtil.none());
|
||||
.setHeader(JWTHeader.TYPE, "JWT")
|
||||
.setPayload("sub", "1234567890")
|
||||
.setPayload("name", "looly")
|
||||
.setPayload("admin", true)
|
||||
.setSigner(JWTSignerUtil.none());
|
||||
|
||||
final String rightToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0." +
|
||||
"eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Imxvb2x5IiwiYWRtaW4iOnRydWV9.";
|
||||
"eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Imxvb2x5IiwiYWRtaW4iOnRydWV9.";
|
||||
|
||||
final String token = jwt.sign();
|
||||
Assertions.assertEquals(rightToken, token);
|
||||
@@ -88,8 +90,8 @@ public class JWTTest {
|
||||
* 必须定义签名器
|
||||
*/
|
||||
@Test
|
||||
public void needSignerTest(){
|
||||
Assertions.assertThrows(JWTException.class, ()->{
|
||||
public void needSignerTest() {
|
||||
Assertions.assertThrows(JWTException.class, () -> {
|
||||
final JWT jwt = JWT.of()
|
||||
.setPayload("sub", "1234567890")
|
||||
.setPayload("name", "looly")
|
||||
@@ -100,10 +102,10 @@ public class JWTTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyTest(){
|
||||
public void verifyTest() {
|
||||
final String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9." +
|
||||
"eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE2MjQwMDQ4MjIsInVzZXJJZCI6MSwiYXV0aG9yaXRpZXMiOlsiUk9MRV_op5LoibLkuozlj7ciLCJzeXNfbWVudV8xIiwiUk9MRV_op5LoibLkuIDlj7ciLCJzeXNfbWVudV8yIl0sImp0aSI6ImQ0YzVlYjgwLTA5ZTctNGU0ZC1hZTg3LTVkNGI5M2FhNmFiNiIsImNsaWVudF9pZCI6ImhhbmR5LXNob3AifQ." +
|
||||
"aixF1eKlAKS_k3ynFnStE7-IRGiD5YaqznvK2xEjBew";
|
||||
"eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE2MjQwMDQ4MjIsInVzZXJJZCI6MSwiYXV0aG9yaXRpZXMiOlsiUk9MRV_op5LoibLkuozlj7ciLCJzeXNfbWVudV8xIiwiUk9MRV_op5LoibLkuIDlj7ciLCJzeXNfbWVudV8yIl0sImp0aSI6ImQ0YzVlYjgwLTA5ZTctNGU0ZC1hZTg3LTVkNGI5M2FhNmFiNiIsImNsaWVudF9pZCI6ImhhbmR5LXNob3AifQ." +
|
||||
"aixF1eKlAKS_k3ynFnStE7-IRGiD5YaqznvK2xEjBew";
|
||||
|
||||
final boolean verify = JWT.of(token).setKey(ByteUtil.toUtf8Bytes("123456")).verify();
|
||||
Assertions.assertTrue(verify);
|
||||
@@ -114,6 +116,7 @@ public class JWTTest {
|
||||
private String name;
|
||||
private Integer age;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void payloadTest() {
|
||||
|
||||
@@ -130,6 +133,7 @@ public class JWTTest {
|
||||
map.put("test2", "2");
|
||||
final Map<String, Object> payload = new HashMap<String, Object>() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
{
|
||||
put("username", username);
|
||||
put("bean", bean);
|
||||
@@ -161,11 +165,11 @@ public class JWTTest {
|
||||
}
|
||||
|
||||
@Test()
|
||||
public void getDateTest(){
|
||||
public void getDateTest() {
|
||||
final String token = JWT.of()
|
||||
.setIssuedAt(DateUtil.parse("2022-02-02"))
|
||||
.setKey("123456".getBytes())
|
||||
.sign();
|
||||
.setIssuedAt(DateUtil.parse("2022-02-02"))
|
||||
.setKey("123456".getBytes())
|
||||
.sign();
|
||||
|
||||
// 签发时间早于被检查的时间
|
||||
final Date date = JWT.of(token).getPayload().getClaimsJson().getDate(JWTPayload.ISSUED_AT);
|
||||
@@ -173,7 +177,7 @@ public class JWTTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void issue2581Test(){
|
||||
public void issue2581Test() {
|
||||
final Map<String, Object> map = new HashMap<>();
|
||||
map.put("test2", 22222222222222L);
|
||||
final JWTSigner jwtSigner = JWTSignerUtil.createSigner(AlgorithmUtil.getAlgorithm("HS256"), Base64.getDecoder().decode("abcdefghijklmn"));
|
||||
@@ -183,17 +187,17 @@ public class JWTTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLongTest(){
|
||||
public void getLongTest() {
|
||||
final String rightToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"
|
||||
+ ".eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJhZG1pbiIsImRldmljZSI6ImRlZmF1bHQtZGV2aWNlIiwiZWZmIjoxNjc4Mjg1NzEzOTM1LCJyblN0ciI6IkVuMTczWFhvWUNaaVZUWFNGOTNsN1pabGtOalNTd0pmIn0"
|
||||
+ ".wRe2soTaWYPhwcjxdzesDi1BgEm9D61K-mMT3fPc4YM";
|
||||
+ ".eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJhZG1pbiIsImRldmljZSI6ImRlZmF1bHQtZGV2aWNlIiwiZWZmIjoxNjc4Mjg1NzEzOTM1LCJyblN0ciI6IkVuMTczWFhvWUNaaVZUWFNGOTNsN1pabGtOalNTd0pmIn0"
|
||||
+ ".wRe2soTaWYPhwcjxdzesDi1BgEm9D61K-mMT3fPc4YM";
|
||||
|
||||
final JWT jwt = JWTUtil.parseToken(rightToken);
|
||||
|
||||
Assertions.assertEquals(
|
||||
"{\"loginType\":\"login\",\"loginId\":\"admin\",\"device\":\"default-device\"," +
|
||||
"\"eff\":1678285713935,\"rnStr\":\"En173XXoYCZiVTXSF93l7ZZlkNjSSwJf\"}",
|
||||
jwt.getPayloads().toString());
|
||||
"{\"loginType\":\"login\",\"loginId\":\"admin\",\"device\":\"default-device\"," +
|
||||
"\"eff\":1678285713935,\"rnStr\":\"En173XXoYCZiVTXSF93l7ZZlkNjSSwJf\"}",
|
||||
jwt.getPayloads().toString());
|
||||
Assertions.assertEquals(Long.valueOf(1678285713935L), jwt.getPayloads().getLong("eff"));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user