小编Ujj*_*apa的帖子

在UTC中使用到期日期时,JWT的到期不起作用

我正在使用jjwtjwt令牌创建。使用本地系统时间设置到期日期时,一切工作正常,即

日期expDate = new Date(new Date()。getTime()+ 180000); //java.util.Date

但是我尝试使用UTC格式的日期时间,并用相同的3分钟到期日期对jwt令牌进行了签名。现在,ExpiredJwtException即使我在创建令牌后也正在进行验证,但是它正在抛出。我正在使用SimpleDateFormat将时区设置为utc。这是我在Java中使用jjwt创建令牌的代码:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date expDate, issDate;
    try {
        expDate = (Date) simpleDateFormat.parse(sdf.format(new Date().getTime() + 180000));
        issDate = (Date) simpleDateFormat.parse(sdf.format(new Date().getTime()));
        JwtBuilder builder = Jwts.builder()
                .setExpiration(expDate)
                .setIssuedAt(issDate)
                .setId(id)
                .signWith(signingKey, signatureAlgorithm);
        jwtToken = builder.compact();
    } catch (ParseException ex) {
    }
Run Code Online (Sandbox Code Playgroud)

令牌已成功创建。我也可以在线验证内容。expDate比issDate早3分钟。我还通过传递已创建的令牌,在调用令牌后立即调用用于验证令牌的方法。我的验证方法有:

    try {
        Jwts.parser().setSigningKey(signingKey).parseClaimsJws(token);
        log.info("jwt verification success");
    } catch (ExpiredJwtException exJwt) {
        log.info("expired jwt : \n{}", exJwt.getMessage());
    } catch …
Run Code Online (Sandbox Code Playgroud)

java date utc jwt jjwt

4
推荐指数
1
解决办法
999
查看次数

java.time.ZonedDateTime与java.util.Calendar性能检查

我试图获取月份价值。但我想检查java.util或java.time中哪个更好,以检索月份值。这是我的代码,用于检查Calender vs ZonedDateTime的性能。

    //import java.time.Instant;
    //import java.time.ZonedDateTime;
    //import java.util.Calendar;

    Instant instant, instant2; 
    String diff;

    instant = Instant.now();
    int month2 = Calendar.getInstance().get(Calendar.MONTH) + 1;
    instant2 = Instant.now();
    diff = String.valueOf(instant2.getNano() - instant.getNano());
    System.out.println("month value " + month2 + "at: " + diff);

    instant = Instant.now();
    int month1 = ZonedDateTime.now().getMonth().getValue();
    instant2 = Instant.now();
    diff = String.valueOf(instant2.getNano() - instant.getNano());
    System.out.println("month value " + month1 + "at: " + diff);
Run Code Online (Sandbox Code Playgroud)

我认为java.time比java.util更好。因此,我期望ZonedDateTime比日历更好。但是在这里我发现了相反的情况。我的结果是:

month value 6at: 0  //Calendar
month value 6at: 9000000 //ZonedDateTime
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样。以及为什么我应该使用java.util.Calender而不是java.timeZonedDateTime的任何建议。

PS我什至把在month1之后的month2取回为:

    Instant …
Run Code Online (Sandbox Code Playgroud)

java performance date java.util.calendar zoneddatetime

-1
推荐指数
1
解决办法
98
查看次数

标签 统计

date ×2

java ×2

java.util.calendar ×1

jjwt ×1

jwt ×1

performance ×1

utc ×1

zoneddatetime ×1