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

标签 java json jwt auth0

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

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/

相关文章:

java - 从 Eclipse 运行 BlackBerry 应用程序时出错

java - JVM 被 MappedByteBuffer 杀死

java - 在spring mvc中将带有另一个参数的json对象发送到 Controller

java - 无法使用 Jersey 解析 RESTful 应用程序中的日期

php - 安卓、MySQL、JSON : MySQL script only returning values row date is 0000-00-00

c# - 如何使用 RestSharp 使用 JWT 访问 token 和用户声明

java - 如何使用 snakeYAML 加载 java.util.Set

java - 如何将 UTF-8 字节 block 转换为字符?

ios - 如何快速检查当前时间是否大于 jwt exp(expiration time)?

coldfusion - 在 Coldfusion 中为 Google 服务帐户创建 JWT