假设我有一个 Web 应用程序需要向另一台服务器进行身份验证并获取令牌才能调用某些方法。
并且此令牌将在 24 小时后过期。所以我需要刷新它。
根据某些决定,我想在收到 403
响应状态时刷新令牌。
我有一个类似的方法:
public String authenticate() {
// some authentication stuff
}
当我的令牌过期时,可能有两个用户尝试同时使用我的服务。
这使我的应用程序几乎同时使用两个不同的线程调用 authenticate()
方法两次。
如何在第二个线程中进行第二次调用以使用第一个线程中的第一个调用结果。
注意我有 maven
(获得合适的依赖项)和 spring framework
能力。
答案 0 :(得分:0)
这是解决方案的示意图;我觉得没有义务写代码。
单线程实际认证
保存结果并保存完成时间
当您处理“下一个”身份验证需求时:
一个。如果上次认证成功后“没多久”,则重用上次的结果
B.否则开始新的身份验证
对于您的案例,“不长”可能长达 23 小时。
您可能还需要清除会话拆卸时的最后一次身份验证结果。