使用jwt令牌解析时出现的一个错误

class java.lang.Double cannot be cast to class java.lang.Integer (java.lang.Double and java.lang.Integer are in module java.base of loader 'bootstrap')

这是错误类型,Double无法强制转换为Integer

public static Claims parseJWT(String jwt){
    Claims claims = Jwts.parser()
            .setSigningKey(signKey)
            .parseClaimsJws(jwt)
            .getBody();
    return claims;
}
这是jwt的解析函数
public static String generateJwt(Map<String, Object> claims){
    String jwt = Jwts.builder()
            .addClaims(claims)
            .signWith(SignatureAlgorithm.HS256, signKey)
            .setExpiration(new Date(System.currentTimeMillis() + expire))
            .compact();
    return jwt;
}这是生成jwt令牌的函数
log.info("员工登录{}",emp);

Emp e=empService.loginEmp(emp);
if(e!=null){
    Map<String, Object> claims=new HashMap<>();
    claims.put("id",e.getId());
    claims.put("name",e.getName());
    claims.put("username",e.getUsername());
    String jwt=JwtUtils.generateJwt(claims);
    return Result.success(jwt);
}
return Result.error("用户名或密码错误");

这是生成jwt令牌

使用AOP统计操作日志报错,最后发现在JwtUtils.generateJwt(claims)方法中,使用了JJWT库来构建JWT令牌。JJWT库会根据存放在claims中的值的类型来自动选择合适的方式进行编码。由于Java是强类型语言,JJWT库在编码时会将数字类型统一转换为浮点数类型(Double),以便于解码时正确还原。所以后来解析出来了一个Double,修改后为
Double idDouble = (Double) claims.get("id");
Integer operateUser = idDouble.intValue();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值