gpt4 book ai didi

java - Auth0 java-jwt 序列化 : name of the field

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:17 26 4
gpt4 key购买 nike

我有一个用户类。而且这个类显然有字段。

public class User {

private String username;
private String password;
private long exp;

//other fields

public long getExpiration() {return exp;}

//other setters/getters

}

我正在使用 Auth0 团队的 java-jwt 库来签名和验证 token 。

字段名称 exp 与 java-jwt 库中的 verifyExpiration() 方法完全匹配。

enter image description here

但是每次当我使用 JWTVerifier(secret).sign(jwtmap) 时,其中 jwtmap 是 Map< String,User > ,它都会使用名称 expiration 序列化我的 exp 字段。

因此它无法正常工作,因为它应该通过 JWTVerifier(secret).verify(token) 阶段。因为.verify(token)期望字段被命名为“exp

最佳答案

过了一段时间我发现了问题。当我将字段从 expiration 重命名为 exp 以便计算 java-jwt 方法时,我没有重命名 get 方法

public long getExpiration() {return exp;}

因为我更喜欢它。

但似乎 java-jwt (通过 BeanSerializerBase)序列化具有属性的类,它不是从类的字段名称中获取,而是从 get 方法中获取。所以在我的例子中基本上采用了“getExpiration”方法的名称并修剪了“get”部分。

因此,您要么应该正确命名类的 getter,要么不要将整个类放入 java-jwt sign(jwtmap) 方法。最好自己通过 getter 逐个字段填充 jwtmap。希望您不需要太多的代币。专业人士,您可以在类(class)中选择您想要的任何名称。并且不需要 @JsonIgnore (或您的类具有的任何注释)。

Map<String, Object> jwtmap = new HashMap<>();
jwtmap.put("username", user.getUsername());
jwtmap.put("exp", user.getExpiration());
final Token tk = new Token(new JWTSigner(secret).sign(jwtmap));

关于java - Auth0 java-jwt 序列化 : name of the field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37297363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com