美文网首页技术分享
JWT设置token过期时间无效

JWT设置token过期时间无效

作者: 过客_hui | 来源:发表于2019-08-14 21:28 被阅读0次

    原因:设置超时时间的顺序有误, 应调用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过期时间无效

        本文链接:https://www.haomeiwen.com/subject/gofojctx.html