如何解决如何在Android中调用REST API之前刷新JWT令牌? 改装,Rx
我正在使用Kotlin,RxJava(RxKotlin),翻新版开发Android应用。
我们的服务使用JWT令牌。
在发送REST API之前刷新过期的令牌并不难。
但是我的问题是...
某些UI同时调用多个REST API。
例如,在MainActivity中将5个API请求同时发送到服务器。
如果令牌已过期,我将收到5个带有401 http错误代码的错误(令牌已过期)。
但是对于我来说,我检查令牌是否已过期。
如果令牌已过期,我会尝试刷新令牌。
因此,在此示例中,我发送了5个刷新令牌的请求。
然后...我将获得5个新的JWT令牌...
我更好的主意是...
在发送5个REST请求之前,我可以检查令牌是否已过期。
但是问题是...我有很多这种UI。
所以我需要一种更漂亮的方法。
我认为这种代码(在UI中发送请求之前检查令牌)可以解决我的问题。
我为自己的愚蠢英语技能感到非常抱歉。
解决方法
您可以集中处理这种情况。 OkHttpClient
有一个称为authenticator()
的方法。当任何响应获得未经授权的异常时,将调用它。下面是一个示例(我在这里使用kotlin):
OkHttpClient.Builder()
.authenticator(object: Authenticator {
override fun authenticate(route: Route?,response: Response): Request? {
if(response.code == 401) {
// build retrofit client manually and call refresh token api
val refreshTokenService = retrofitClient.create(RefreshTokenService::class.java)
val refreshTokenResponse = refreshTokenService.refreshToken().execute()
val token = refreshTokenResponse.body().token
return response.request.newBuilder().header("Authorization",token).build()
} else {
return response.request
}
}
})
将此客户添加到改造中。您必须在此authenticator
中更改刷新令牌登录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。