【发布时间】:2018-10-02 13:07:58
【问题描述】:
我正在使用JwtBuilder 创建一个令牌字符串。但是在使用键提取值时,它给出了ClassCastException。为了更好地理解代码 sn-p 提供如下:
令牌创建:
private JwtBuilder getJwtBuilder(
String jti,
Long issuedAt,
Long expiredAt,
Long businessAccountId,
Long consumerAccountId,
String deviceId
) {
JwtBuilder builder = Jwts.builder();
builder.setIssuer("SO");
builder.setSubject(TokenConstant.TOKEN_SUBJECT);
builder.setId(jti);
builder.setIssuedAt(new Date(issuedAt));
builder.setExpiration(new Date(expiredAt));
builder.claim(TokenConstant.BUSINESS_ACCOUNT_ID, businessAccountId);
builder.claim(TokenConstant.DEVICE_ID, deviceId);
builder.signWith(SignatureAlgorithm.HS512, secretKey);
return builder;
}
解码令牌:
private JsonWebToken decodeToken(String jsonWebToken) {
try {
Jws<Claims> map = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jsonWebToken);
Claims claims = map.getBody();
return getJsonWebTokenFromClaims(claims);
} catch (SignatureException | MalformedJwtException e) {
throw new InvalidTokenException(e.getMessage());
}
}
private JsonWebToken getJsonWebTokenFromClaims(Claims claims) {
JsonWebToken token = new JsonWebToken();
token.jti = claims.getId();
token.expirationTime = claims.getExpiration().getTime();
token.issuedAt = claims.getIssuedAt().getTime();
token.deviceId = (String) claims.get(TokenConstant.DEVICE_ID);
token.businessAccountId = (Long) claims.get(TokenConstant.BUSINESS_ACCOUNT_ID);
return token;
}
例外:
2018-04-23 10:27:04.476 错误 b.c.i.s.c.MyExceptionHandler - 应用程序错误:{} java.lang.ClassCastException:java.lang.Integer 不能转换为 java.lang.Long
jwt 版本:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.6.0</version>
</dependency>
如您所见,我的代码在将 Integer 类型值转换为 Long 类型时出错。我无法理解,为什么Object 类型会隐式转换为Integer?
【问题讨论】:
-
请直接发布您的代码而不是截图,点击4个链接查看您的代码相当麻烦。请阅读How to Ask
-
按照您的建议更新。
标签: java spring-boot jwt