【发布时间】:2018-06-02 07:11:52
【问题描述】:
我正在使用 JWT 令牌,并且我声称其中一个是 ByteBuffer。 JWT 已成功生成,但是当我尝试解析 JWT 令牌并验证声明时,它抱怨 claimSet 没有值。
我的代码如下所示:
ByteBuffer encryptedText = getEncryptedTextAsByteBuffer();
Instant timestamp = timestampSupplier.get();
JWTClaimsSet claimsSet = new JWTClaimsSet();
claimsSet.setAudience("test-audience");
claimsSet.setIssuer("test-issuer");
claimsSet.setNotBeforeTime(Date.from(timestamp));
claimsSet.setExpirationTime(Date.from(Instant.ofEpochSecond(expirationTimestamp)));
claimsSet.setClaim("myObject", encryptedText );
PlainJWT jwt = new PlainJWT(claimsSet);
return jwt.serialize();
验证码如下所示:
PlainJWT jwtToken = PlainJWT.parse(jwtToken);
ReadOnlyJWTClaimsSet claimsSet = jwtToken.getJWTClaimsSet();
Map<String, Object> claims = claimsSet.getAllClaims();
ByteBuffer encryptedText = (ByteBuffer) claims.get("myObject");
我看到的异常信息是这样的:
java.lang.ClassCastException: net.minidev.json.JSONObject cannot be cast to java.nio.ByteBuffer
我添加了一个调试器,发现 Jwt 代有一个有效的非空 ByteBuffer,但生成的声明有“myObject”键,但值是一个空的 json 字符串。我们不能将声明用作 byteBuffer 吗?还是我做错了什么?
任何帮助将不胜感激。
【问题讨论】:
-
claims.get("myObject")正在返回JSONObject对象,但您将其转换为ByteBuffer。尝试获取它JSONObjectencryptedText = (JSONObject) claims.get("myObject");并查看 JSONObject 包含的内容。