1

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

我能够成功创建带有自定义有效负载的 JWT 令牌。

现在,当我要去的parse时候,我需要Map<String, Object>一个对象,它包含在创建时添加的所有自定义有效负载,但不幸的是我无法完成它。

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

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

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

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

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

但是我需要Map<String,Object>

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

4

2 回答 2

3

io.jsonwebtoken.Claims延伸java.util.Map<String, Object>

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

所以你不应该做任何事情来转换Map,因为它已经是Map<String, Object>. 如果您想摆脱他们的自定义方法并转换ClaimsHashMap,最短的方法就是传递ClaimsHashMap的构造函数。它与您手动执行的操作相同。

Claims claims = ...; 

Map<String, Object> expectedMap = new HashMap<>(claims);
于 2018-02-21T23:41:41.037 回答
0

最后,我通过自己的聆听得到了答案——在得到答案之前不要停下来,

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;
}
于 2017-05-01T11:11:47.387 回答