如何将io.jsonwebtoken.Claims转换为java.util.Map<String,Object>?

How to convert from io.jsonwebtoken.Claims to java.util.Map<String,Object>?

我正在使用 io.jsonwebtoken maven 依赖项来处理 JWT 令牌。

I am able to create a JWT token with custom payloads successfully.

现在,当我要 parse 它时,我需要 Map<String, Object> 对象 ,它具有创建时添加的所有自定义负载 , 但很遗憾我无法完成它。

我正在使用下面的代码来解析它,

JwtParser parser = Jwts.parser();
Claims claims = parser
                .setSigningKey(DatatypeConverter.parseBase64Binary(SIGN_KEY))
                        .parseClaimsJws(jwt).getBody();

现在,我有 io.jsonwebtoken.Claims ,但不知道如何将此 io.jsonwebtoken.Claims 转换为 java.util.Map<String,Object>

但是我试着用这个知道(几乎看起来像我想要的):-

System.out.println(claims.toString()); -> this is correctly prints whole custom payloads.

但是我需要Map<String,Object>

任何帮助将不胜感激..!!

Finally, i got the answer by listening my own - don't stop till get the answer,

public Map<String, Object>  getMapFromIoJsonwebtokenClaims(Claims claims){
    Map<String, Object> expectedMap = new HashMap<String, Object>();
    for(Entry<String, Object> entry : claims.entrySet()) {
        expectedMap.put(entry.getKey() , entry.getValue());
    }
    return expectedMap;
}

io.jsonwebtoken.Claims 扩展 java.util.Map<String, Object>

io.jsonwebtoken.impl.DefaultClaims,唯一提供的 Claims 实现是他们对 Map 的实现,它装饰了 LinkedHashMap<String, Object> 并添加了几个方法。

因此您不应该转换为 Map,因为它已经是 Map<String, Object>。 如果您想摆脱他们的自定义方法并将 Claims 转换为 HashMap,最短的方法就是将 Claims 传递给 HashMap 的构造函数。它与您手动执行的操作相同。

Claims claims = ...; 

Map<String, Object> expectedMap = new HashMap<>(claims);