【问题标题】:Generate unique token with creation time inside生成带有创建时间的唯一令牌
【发布时间】:2017-04-15 19:24:28
【问题描述】:

仅使用 java 8,没有其他库,我需要生成一个在 5 分钟内过期的唯一令牌,但我不想将创建时间保存在 DB 上,而是将创建时间存储在令牌中以对其进行解码以后用的时候。

我该怎么做?

【问题讨论】:

  • 占用创建时间并为其添加一个 MAC,这样就不会轻易更改它。但是,如果您每毫秒发出多个令牌,这将不是唯一的。如果需要,可以添加计数器值。
  • 这似乎是一个概念问题而不是编程问题。您可以通过System.currentTimeMillis()获取创建时间。你用那个long做什么取决于你的令牌的性质和你需要什么样的安全性。或者您如何验证令牌的正确性。我想,仍然必须有一个数据库存储,不是吗?

标签: java java-8 token access-token


【解决方案1】:

这是你问题的答案

String token = UUID.randomUUID().toString() + ":" + System.currentTimeMillis();
String[] t = token.split(":");
String token_time = t[1];

然后你可以用token_time 变量做任何你想做的事 希望对你有帮助

【讨论】:

    【解决方案2】:

    您可以简单地生成一个由两部分连接而成的令牌:

    1. 第一部分是一个 UUID,以确保令牌是唯一的; UUID reference
    2. 第二部分是您可以稍后解码的时间戳

    【讨论】:

    • 可以使用 V1 的 UUID 规范,已经包含时间戳! ;)
    • 听起来很简单,但是如何验证令牌的正确性呢?如果您通过存储完整的令牌来做到这一点,那么您已经有效地存储了 OP 希望避免的时间。
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 2014-04-16
    • 2019-05-12
    • 2015-01-02
    • 2015-02-04
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多