如何在android中调用REST API之前刷新JWT令牌?(改装,Rx)



我正在使用Kotlin、RxJava(RxKotlin(和Reform开发一个android应用程序。

我们的服务使用JWT代币。

在发送REST API之前,刷新过期的令牌并不困难。

但我的问题是。。。

某些UI同时调用多个REST API。

例如,5个API请求同时发送到MainActivity中的服务器。

如果令牌已经过期,我将收到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中的刷新令牌登录。

最新更新