【问题标题】:How to convert from io.jsonwebtoken.Claims to java.util.Map<String,Object>?如何从 io.jsonwebtoken.Claims 转换为 java.util.Map<String,Object>?
【发布时间】:2017-09-28 18:52:29
【问题描述】:

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

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

现在我要去parse 它,我需要Map&lt;String, Object&gt; 对象其中包含在创建时添加的所有自定义有效负载,但不幸的是我无法完成它.

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

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

现在,我有 io.jsonwebtoken.Claims ,但不知道如何将这个 io.jsonwebtoken.Claims 转换为 java.util.Map&lt;String,Object&gt;

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

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

但我需要Map&lt;String,Object&gt;

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

【问题讨论】:

    标签: java maven jwt jjwt


    【解决方案1】:

    io.jsonwebtoken.Claims 扩展 java.util.Map&lt;String, Object&gt;

    io.jsonwebtoken.impl.DefaultClaimsClaims 唯一提供的实现,是他们的 Map 实现,它装饰了 LinkedHashMap&lt;String, Object&gt; 并添加了几个方法。

    所以你不应该做任何事情来转换为Map,因为它已经是Map&lt;String, Object&gt;。 如果您想摆脱他们的自定义方法并将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;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-03-08
        • 2020-09-25
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多