我正在用
jwsClaims.getBody()
解析 JWT,我得到的输出如下所示:
{
iss=issuer,
[email protected],
roleName=user,
companyName=company,
iat=1493790315,
exp=1494395115
}
输出应该是 JSON,但它缺少键和值周围的双引号 (")。我尝试在 JSON 上使用对象映射器,但收到错误消息:
IOException in fromJson: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('i' (code 105)): was expecting double-quote to start field name at [Source: {iss=issuer, [email protected], roleName=user, companyName=company, iat=1493790315, exp=1494395115}; line: 1, column: 3]
您知道为什么声明中缺少引用吗?
我也有同样的问题。不是 getBody() 删除双引号,而是
parse
使用 ObjectMapper.readValue()
并将 json 转换为 Map
我还没有找到 jjwt 的解决方案,所以我更改为 jose4j
并让它工作。
希望这也能帮助你。
声明的主体可能是某种类型的对象映射,在这种情况下,假设声明主体不为空,这应该可以工作:
import com.google.gson.Gson;
try {
Gson gson = new Gson();
System.out.println(gson.toJson(body));
} catch (Exception e1) {
System.out.println("body class: "+body.getClass().getName());
System.out.println(body.toString());
}
如果结果仍然不符合预期,那么您可能可以从主体的类中收集一些信息,这些信息将在异常中打印,或者您可能需要更改代码以在 try/catch 之前首先打印类类型.