Android 处理token过期
在Android开发中,处理token过期通常涉及到网络请求的拦截和重新认证。以下是一个简单的示例,展示了如何在发起网络请求时检查token是否过期,并在过期时进行重新认证。
public class ApiHelper {
private final OkHttpClient client;
private Retrofit retrofit;
private final String TOKEN_EXPIRED_CODE = "401";
public ApiHelper() {
client = new OkHttpClient();
retrofit = new Retrofit.Builder()
.baseUrl("https://your-api-url.com/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
}
public <T> T createService(Class<T> serviceClass) {
return retrofit.create(serviceClass);
}
public void checkTokenExpiration(final Call<ResponseBody> call, final TokenRefreshListener listener) {
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.code() == 401) {
// Token has expired, refresh the token
listener.onTokenExpired();
} else {
// Proceed with the response
listener.onSuccess(response);
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
// Handle the failure
listener.onFailure(t);
}
});
}
public interface TokenRefreshListener {
void onTokenExpired();
void onSuccess(Response<ResponseBody> response);
void onFailure(Throwable t);
}
}
使用上述ApiHelper
类,你可以在发起网络请求时调用checkTokenExpiration
方法,并在回调中处理token过期和成功的情况。如果token过期,TokenRefreshListener
的onTokenExpired
方法会被调用,在这里你可以实现你的token刷新逻辑。
ApiHelper apiHelper = new ApiHelper();
Call<ResponseBody> yourApiCall = yourApiService.yourApiMethod();
apiHelper.checkTokenExpiration(yourApiCall, new ApiHelper.TokenRefreshListener() {
@Override
public void onTokenExpired() {
// 刷新token的逻辑
refreshToken();
}
@Override
public void onSuccess(Response<ResponseBody> response) {
// 处理响应
handleResponse(response);
}
@Override
public void onFailure(Throwable t) {
// 处理错误
handleError(t);
}
});
在refreshToken
方法中,你可以向认证服务器发送一个请求来获取新的token,并在获取新token后重新发起原始的网络请求。这样就可以在token过期时自动处理认证和重试请求,而不需要用户手动干预。