JWT设置token过期时间无效

原因:设置超时时间的顺序有误, 应调用setClaims()方法设置claims属性。 在调用setExpiration()方法设置超时时间。

Date expiresDate = new Date(System.currentTimeMillis() + expire_time);// expire_time为token有效时长, 单位毫秒

错误顺序示例:

    JwtBuilder result = Jwts.builder()

                                .setExpiration(date)

                                .setClaims(claims)

                                .signWith(SignatrueAlgorithm.HS256, Constants.BASE64SECRET);

正确示例:

JwtBuilder result = Jwts.builder()

                                .setClaims(claims)

                                .setExpiration(date)

                                .signWith(SignatrueAlgorithm.HS256, Constants.BASE64SECRET);

原因分析:

//io.jsonwebtoken.impl.DefaultJwtBuilder#setExpiration 中代码

@Override

 public JwtBuilder setExpiration(Date exp){

    if(exp!=null){

    ensureClamis().setExoiration(exp);

}else{

    if(this.claims!=null){

    //noinspection ConstantConditions

    this.claims.setExpiration(exp);

}

}

return this;

}

// io.jsonwebtoken.impl.DefaultJwtBuilder#ensureClaims 中代码

    protected Claims ensureClaims() {

            // 如果claims为null, 则创建新的示例。 此处没有问题

                  if(this.claims==null){

                        this.claims=new DefaultClaims();

                    }

                    return this.claims;

}

// io.jsonwebtoken.impl.DefaultJwtBuilder#setClaims(io.jsonwebtoken.Claims) 中代码

@Override

public JwtBuilder setClaims(Claims claims) {

// 直接给claims赋值, 这里个操作覆盖了之前设置的超时时间,

// 导致最终构造token时, 没有设置超时时间

this.claims=claims;

return this;

}

你可能感兴趣的:(JWT设置token过期时间无效)