我是新来的android编程和改造,我做了一个示例应用程序,我必须使用访问令牌进行两个并行网络调用。 当访问令牌过期并返回401状态码时,如果我看到401 HTTP状态码,我必须使用此访问令牌进行刷新刷新调用,但是并行调用的问题是它导致刷新竞争条件刷新令牌是否有避免这种情况的最佳方法,以及如何智能地刷新令牌而没有任何冲突。当响应未授权重试最后一次失败的请求与他们处理背景刷新令牌调用改进并行网络调用
0
A
回答
2
OkHttp会自动询问凭据身份验证。
public class TokenAuthenticator implements Authenticator {
@Override
public Request authenticate(Proxy proxy, Response response) throws IOException {
// Refresh your access_token using a synchronous api request
newAccessToken = service.refreshToken();
// Add new header to rejected request and retry it
return response.request().newBuilder()
.header(AUTHORIZATION, newAccessToken)
.build();
}
@Override
public Request authenticateProxy(Proxy proxy, Response response) throws IOException {
// Null indicates no attempt to authenticate.
return null;
}
连接的验证器到OkHttpClient你做拦截
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setAuthenticator(authAuthenticator);
使用此客户端创建改造RestAdapter时
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(ENDPOINT)
.setClient(new OkClient(okHttpClient))
.build();
return restAdapter.create(API.class);
选中此相同的方式:Fore more details visit this link
0
尝试拨打队列,如刷新令牌操作:
class TokenProcessor {
private List<Listener> queue = new List<Listener>();
private final Object synch = new Object();
private State state = State.None;
private String token;
private long tokenExpirationDate;
public void getNewToken(Listener listener){
synchronized(synch) {
// check token expiration date
if (isTokenValid()){
listener.onSuccess(token);
return;
}
queue.add(listener);
if (state != State.Working) {
sendRefreshTokenRequest();
}
}
}
private void sendRefreshTokenRequest(){
// get token from your API using Retrofit
// on the response call onRefreshTokenLoaded() method with the token and expiration date
}
private void onRefreshTokenLoaded(String token, long expirationDate){
synchronized(synch){
this.token = token;
this.tokenExpirationDate = expirationDate;
for(Listener listener : queue){
try {
listener.onTokenRefreshed(token);
} catch (Throwable){}
}
queue.clear();
}
}
}
这是一个示例代码,它是如何实现的。
相关问题
- 1. 使用刷新令牌处理401错误并调用相同的函数
- 2. RESTful API - 调用并使用令牌处理订单
- 3. 处理JWT和刷新令牌流
- 4. Microsoft Graph API处理oAuth2.0刷新令牌
- 5. 如何使用Android帐户管理器处理刷新令牌
- 6. 使用UDP进行网络处理
- 7. 如何使用刷新令牌请求设计网络层?
- 8. 使OAuth刷新令牌调用来生成新的访问令牌
- 9. Hystrix:在getFallBack中进行网络调用()
- 10. iOS使用刷新的身份验证令牌处理请求
- 11. 如何处理“刷新令牌不可用”?
- 12. firebase令牌为空,令牌刷新在我的testFlight中连续调用
- 13. 如何在刷新时进行全屏幕背景更改?
- 14. ... API调用OAuth2.0的刷新令牌问题PandaDocs
- 15. Azure图形API调用没有刷新令牌
- 16. iOS ADAL-使用刷新令牌进行静默呼叫
- 17. 使用React Native和Redux进行OAuth令牌刷新
- 18. 使用make调用批处理文件并进行更改持久化
- 19. 刷新Firebase令牌
- 20. Firebase令牌刷新
- 21. Office365刷新令牌
- 22. 更改UIAlertController背景色调
- 23. 批处理脚本 - 调用子程序每个令牌
- 24. 刷新背景GAE
- 25. OAuth 2请求新的访问令牌使用刷新令牌?
- 26. 使用刷新令牌获取新的访问令牌adal js
- 27. 使用个人api的刷新令牌更新访问令牌
- 28. 进行API调用并行
- 29. 进行并行处理-j命令
- 30. 如何刷新网站的背景?