【发布时间】:2017-07-05 20:14:51
【问题描述】:
我正在使用 HttpCLient 用 Java 编写一个 REST 客户端,我访问的 REST API 需要一个用于每个 REST 操作的身份验证令牌。此令牌的有效期为 24 小时。
我现在处理这个问题的方式是每次我需要进行 REST 调用时调用“getAuth()”方法,这似乎是身份验证服务器上的开销。
如何方便地存储此身份验证令牌并管理其生命周期? 是否有任何记录在案的最佳做法?
我想到了以下解决方案
public class MySession {
String user;
String pass;
public MySession(String user, String pass) {
this.user = user;
this.pass = pass;
}
public getAuth() {
//user user, pass to get auth token
}
}
然后将会话对象传递给任何需要令牌的类。如果token过期了,再次调用这个方法即可
【问题讨论】:
-
你的客户是什么样的?它是 Java 应用程序吗?您是否关心将令牌存储在客户端还是服务器端?
-
它是一个 java dropwizard 应用程序,我担心将令牌存储在数据库中并进行过多的数据库调用,而不是我应该继续使用令牌直到它过期然后请求一个新的(当它抛出一个“令牌过期”异常或其他东西..
-
您能出示您的客户代码吗?在客户端,如果将令牌存储在数据库中可能会导致性能问题,则可以在内存中使用缓存。如果您知道令牌将过期并且您可以刷新它,那就去做吧:)
-
我删除了我的答案,因为我误解了你的问题。我认为这取决于您使用的 REST API 的安全问题。您对所有请求使用相同的凭据?如果令牌有 24 小时,我会重复使用它直到它过期。
-
@gabrielgiussi 是的,我对所有请求都使用相同的凭据,所以这个令牌在发出后 24 小时内有效,我没有 API 来刷新它,而是我必须请求一个新令牌到期后。如何跟踪到期时间?我是否只是依靠一个异常说令牌已过期?
标签: java rest authentication httpclient