如何从 io.jsonwebtoken.Claims 转换为 java.util.Map<String,Object>?
Posted
技术标签:
【中文标题】如何从 io.jsonwebtoken.Claims 转换为 java.util.Map<String,Object>?【英文标题】:How to convert from io.jsonwebtoken.Claims to java.util.Map<String,Object>? 【发布时间】:2017-09-28 18:52:29 【问题描述】:我正在使用 io.jsonwebtoken
maven 依赖项处理 JWT
令牌。
我能够成功创建带有自定义负载的 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>
任何帮助将不胜感激..!!
【问题讨论】:
【参考方案1】: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);
【讨论】:
【参考方案2】:最后,我通过自己的聆听得到了答案——在得到答案之前不要停下来,
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>?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数
如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个