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



我正在使用 JWT使用io.jsonwebtoken Maven依赖关系。

我能够成功创建一个带有自定义有效载荷的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.Claims转换为java.util.Map<String,Object>

但是,我尝试知道(几乎看起来相似,我想要(: -

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

但我需要Map<String,Object>

任何帮助都会很感激。!!

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

io.jsonwebtoken.impl.DefaultClaimsClaims的唯一提供的实现,是它们的MAP的实现,它装饰了LinkedHashMap<String, Object>并添加了几种方法。

因此,您不应采取任何行动将其转换为Map,因为它已经是Map<String, Object>。如果您想删除其自定义方法并将Claims转换为HashMap,则最短的方法就是将Claims传递到HashMap的构造函数。它与您手动相同。

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

最后,我通过自己听我的答案 - 不要在得到答案之前停止,

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;
}

相关内容

最新更新