相关疑难解决方法(0)

当多个请求发送到服务器时,Okhttp刷新过期令牌

我同时加载了一个ViewPager和三个webservice调用ViewPager.

当第一个返回401时,Authenticator调用并刷新内部令牌Authenticator,但剩余的2个请求已经发送到具有旧刷新令牌的服务器,并且失败,498在Interceptor中捕获并且应用程序被注销.

这不是我期望的理想行为.我想将第二个和第三个请求保留在队列中,当刷新令牌时,重试排队的请求.

目前,我有一个变量来指示令牌刷新是否正在进行中Authenticator,在这种情况下,我取消了所有后续请求Interceptor,用户必须手动刷新页面,否则我可以注销用户并强制用户登录.

使用okhttp 3.x for Android的上述问题有什么好的解决方案或架构?

编辑:我想解决的问题一般,我不想对我的电话进行排序.即等待一个调用完成并刷新令牌,然后仅在活动和片段级别上发送其余请求.

代码被要求.这是一个标准代码Authenticator:

public class CustomAuthenticator implements Authenticator {

    @Inject AccountManager accountManager;
    @Inject @AccountType String accountType;
    @Inject @AuthTokenType String authTokenType;

    @Inject
    public ApiAuthenticator(@ForApplication Context context) {
    }

    @Override
    public Request authenticate(Route route, Response response) throws IOException {

        // Invaidate authToken
        String accessToken = accountManager.peekAuthToken(account, authTokenType);
        if (accessToken != null) {
            accountManager.invalidateAuthToken(accountType, accessToken);
        }
        try {
                // Get new refresh …
Run Code Online (Sandbox Code Playgroud)

java android http retrofit okhttp

31
推荐指数
3
解决办法
5564
查看次数

Okhttp Authenticator多线程

OkHttp在我的Android应用程序中使用了几个异步请求.所有请求都需要使用标头发送令牌.有时我需要使用RefreshToken刷新令牌,所以我决定使用OkHttp's Authenticatorclass.

当两个或多个异步请求同时从服务器获得401响应代码时会发生什么?authenticate()是为每个请求调用Authenticator的方法,还是只为第一个获得401的请求调用一次?

@Override
public Request authenticate(Proxy proxy, Response response) throws IOException
{                
    return null;
}
Run Code Online (Sandbox Code Playgroud)

如何只刷新一次令牌?

authentication multithreading android okhttp

8
推荐指数
1
解决办法
1984
查看次数

标签 统计

android ×2

okhttp ×2

authentication ×1

http ×1

java ×1

multithreading ×1

retrofit ×1