【问题标题】:JJWT Tokens. How do I set timeout?JJWT 代币。如何设置超时?
【发布时间】:2017-02-15 13:10:41
【问题描述】:

使用 jjwt 库,

 String compactJws = Jwts.builder().setSubject("Joe").signWith(SignatureAlgorithm.HS512, key).compact();

但是这个令牌是永久性的,我该如何设置某种超时时间?

【问题讨论】:

    标签: java jwt jjwt


    【解决方案1】:
    Date expiration = getExpirationDate(); // implement me
    
    Jwts.builder().setSubject("Joe")
        .setExpiration(expiration)
        .signWith(SignatureAlgorithm.HS512, key)
        .compact();
    

    根据 JWT 规范,日期将转换为自纪元以来的 秒数(不是毫秒),并存储为 exp JWT 声明。解析器将查看该声明并确保 JWT 未过期。

    请注意,过期检查基于解析时的系统时钟时间。如果生成令牌的机器的时钟与解析令牌的机器相比有合理的偏差,则过期检查可能会失败。在这种情况下,您可以使用 JJWT 的 setAllowedClockSkewSeconds 方法(在 JwtParser/Builder 上)为时钟之间的差异留出一些回旋余地(1 到 2 分钟应该绰绰有余),例如:

    Jwts.parser().setAllowedClockSkewSeconds(120)...etc...
    

    如果由于某种原因可能不够好,您可以通过以下方式控制实际的解析时钟:

    Jwts.parser().setClock(new MyClock())...etc...
    

    在大多数情况下,设置Clock 不是必需的(它通常在测试用例中最有用)。

    【讨论】:

    • 谢谢,真的把事情搞清楚了。今天早上你帮我节省了几个小时的谷歌搜索时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2011-08-09
    • 2011-06-23
    • 2013-10-26
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多