Auth0 java-jwt序列化:字段名称
Auth0 java-jwt serialization: name of the field
我有一个用户 class。而这个class显然是有字段的
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 库来签署和验证令牌。
字段名称 exp 完全匹配 verifyExpiration() 来自 java-jwt 库的方法。
但每次我使用 JWTVerifier(secret).sign(jwtmap) 时,jwtmap 是 Map 它序列化了我的 exp 字段,名称为 expiration .
所以它没有工作,因为它应该是通过 JWTVerifier(secret).verify(token) 阶段。因为 .verify(token) 期望字段被命名为“exp”
经过一段时间我发现了问题。当我将我的字段从 expiration 重命名为 exp 所以这将是 mathing java-jwt 方法,我没有重命名 get 方法
public long getExpiration() {return exp;}
因为我更喜欢它
但似乎 java-jwt(通过 BeanSerializerBase)使用属性序列化 classes,它不是来自 class 的字段名称,而是来自 get 方法.所以在我的例子中,基本上采用了 "getExpiration" 方法的名称并修剪了 "get" 部分。
所以你要么应该正确命名你的 class 的吸气剂,要么不要把整个 class 放到 java-jwt sign(jwtmap ) 方法。最好自己通过 getters 逐字段填充 jwtmap。希望您的令牌不需要太多。亲,您可以在 class 中选择任何您想要的名称。并且不需要 @JsonIgnore(或您的 class 具有的任何注释)。
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));
我有一个用户 class。而这个class显然是有字段的
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 库来签署和验证令牌。
字段名称 exp 完全匹配 verifyExpiration() 来自 java-jwt 库的方法。
但每次我使用 JWTVerifier(secret).sign(jwtmap) 时,jwtmap 是 Map
所以它没有工作,因为它应该是通过 JWTVerifier(secret).verify(token) 阶段。因为 .verify(token) 期望字段被命名为“exp”
经过一段时间我发现了问题。当我将我的字段从 expiration 重命名为 exp 所以这将是 mathing java-jwt 方法,我没有重命名 get 方法
public long getExpiration() {return exp;}
因为我更喜欢它
但似乎 java-jwt(通过 BeanSerializerBase)使用属性序列化 classes,它不是来自 class 的字段名称,而是来自 get 方法.所以在我的例子中,基本上采用了 "getExpiration" 方法的名称并修剪了 "get" 部分。
所以你要么应该正确命名你的 class 的吸气剂,要么不要把整个 class 放到 java-jwt sign(jwtmap ) 方法。最好自己通过 getters 逐字段填充 jwtmap。希望您的令牌不需要太多。亲,您可以在 class 中选择任何您想要的名称。并且不需要 @JsonIgnore(或您的 class 具有的任何注释)。
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));