我正在使用 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.DefaultClaims
是Claims
的唯一提供的实现,是它们的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;
}