我是新來的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. 使用oAuth令牌進行API調用
- 3. IdentityServer3刷新令牌 - 在哪裏調用刷新
- 4. 使用GCD進行背景處理
- 5. RESTful API - 調用並使用令牌處理訂單
- 6. 處理JWT和刷新令牌流
- 7. Microsoft Graph API處理oAuth2.0刷新令牌
- 8. oauth2如何處理刷新令牌
- 9. Android:處理同步網絡調用
- 10. 使用UDP進行網絡處理
- 11. 如何使用Android帳戶管理器處理刷新令牌
- 12. 如何使用刷新令牌請求設計網絡層?
- 13. 使OAuth刷新令牌調用來生成新的訪問令牌
- 14. 註銷用戶,並刷新令牌
- 15. Hystrix:在getFallBack中進行網絡調用()
- 16. 如何處理網絡線程調用並在J2me中等待進度?
- 17. 如何處理「刷新令牌不可用」?
- 18. iOS使用刷新的身份驗證令牌處理請求
- 19. firebase令牌爲空,令牌刷新在我的testFlight中連續調用
- 20. Python:在網絡服務啓動之前進行網絡調用
- 21. 處理遊戲進行到背景
- 22. 如何在刷新時進行全屏幕背景更改?
- 23. ... API調用OAuth2.0的刷新令牌問題PandaDocs
- 24. 刷新調用不應該使舊訪問令牌失效嗎?
- 25. 調用刷新令牌時,id_token格式錯誤
- 26. Azure圖形API調用沒有刷新令牌
- 27. 在使用java.util.logging進行調試期間刷新流處理程序Autoflush
- 28. 使用NSURLSession進行網絡連接與背景上傳
- 29. 使用React Native和Redux進行OAuth令牌刷新
- 30. iOS ADAL-使用刷新令牌進行靜默呼叫