2016-05-18 2 views
1

私はUserクラスを持っています。そして、このクラスには明らかにフィールドがあります。Auth0 java-jwtシリアル化:フィールド名

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ライブラリーから方法と一致します。

enter image description here

しかし、毎回私はそれはと私のEXPフィールドをシリアライズだ> jwtmapが地図<文字列、ユーザーであるJWTVerifier(秘密).sign(jwtmap)を、使用しています名前有効期限JWTVerifier(秘密).verify(トークン)段階thorughことになっているよう

だからそれは働いていません。 .verify(トークン)は、フィールドはかなり時間が経過した後、「EXP

答えて

0

として指名されることを想定していたので、私は問題を発見しました。私は満了からので、それは、Java-JWT方法をmathingされるだろう EXP に私のフィールドの名前を変更したとき、私はより良いそれが好きなので、私はgetメソッド

public long getExpiration() {return exp;} 

に改称しませんでした。

しかし、java-jwt(BeanSerializerBase経由)は、クラスのフィールド名ではなくgetメソッドから取得するプロパティを持つクラスをシリアライズするように見えます。だから私の場合、基本的に "getExpiration"メソッドの名前を取って、 "get"の部分をトリミングしました。

だから、どちらか正しくクラスのゲッターに名前を付ける必要がありますまたはJava-JWT 記号(jwtmap)メソッドにクラス全体を入れてはいけません。そしてより良い人口ゲッターを介してjwtmapを入力して、フィールドでフィールドをフィールドします。あなたがあなたのトークンのために多くを必要としないことを願っています。 Proでは、あなたはあなたのクラスの中であなたが望むどんな名前でも選ぶことができます。 @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)); 
関連する問題