猿问

通过比较 longs 检查 JWT exp 字段

我想检查我的 JWT 令牌是否仍然有效(exp 仍然在未来)但我不确定我是否以正确的方式做到了。


我的检查功能 -


public boolean checkForValidExpField(String jwtToken) throws JsonProcessingException, IOException {

    //split by .

    String[] split_string = jwtToken.split("\\.");

    //get body

    String base64EncodedBody = split_string[1];

    Base64 base64Url = new Base64(true);


    String body = new String(base64Url.decode(base64EncodedBody));

    //body to json

    ObjectMapper mapper = new ObjectMapper();

    JsonNode actualObj = mapper.readTree(body);

    //get exp 

    String exp = actualObj.get(JWT_EXP_KEY).asText(); //JWT_EXP_KEY = exp

    //to long

    long expLong = Long.parseLong(exp) * 1000;

    //get current TS

    long currentTime = System.currentTimeMillis();

    //check

    return expLong >= currentTime; 

}


这是只检查 exp 字段的正确方法吗?我自己写的,所以我只是想确定一下。


慕斯王
浏览 133回答 1
1回答

慕容森

声明exp(以及其他与时间相关的声明,如nbf)是数字日期:JWT文档(RFC)定义了数字日期:一个 JSON 数值,表示从 1970-01-01T00:00:00Z UTC 到指定的 UTC 日期/时间的秒数,忽略闰秒。因此,您确实可以比较代码中显示的 long 值,或者从 exp 值中减去当前时间以获得剩余时间。
随时随地看视频慕课网APP

相关分类

Java
我要回答