java拦截器统一认证_OkHttp3.0(结合Retrofit2/Rxjava)利用拦截器实现全局超时自动登录、添加统一参数...

本文介绍了如何在Java项目中,结合OkHttp3、Retrofit2和RxJava使用拦截器实现全局添加统一参数(如version、os、userId)以及在登录超时时自动重新登录的功能。通过创建拦截器,可以在请求前自动添加必要参数,当遇到登录超时的情况,拦截器会触发重新登录并重新发送请求。同时,自定义的ConverterFactory和Exception处理能简化异常处理逻辑。
摘要由CSDN通过智能技术生成

应用场景:1.服务端为了统计各个平台、版本的使用情况,有时在接口中要求传递统一的诸如version(客户端版本)、os(客户端平台android/iOS)、userId等参数,这时如果在接口中一一添加就比较繁琐了,考虑做全局处理;另外,一次登录成功后,登录状态都是有时效的,所以在发生登录失效后,需要自动重新刷新登录状态,而且一般情况下,单个请求在发出前是没法判断是否已经登录超时的,所以就需要一个全局的处理方案。

其实这个与Retrofit2/Rxjava貌似没有关系,之所以标题里提到这个,是因为我的项目是结合这俩库用的,我在搜索这类问题的解决方法时就是从Retrofit2/Rxjava的retryWhen方法下手的,后来发现直接在OkHttpClient添加拦截器,即可实现想要的效果,而且是全局性的,这应该是这类问题的最简单解决方式了。

主要代码如下:

Network.java

import android.text.TextUtils;

import android.util.Log;

import com.google.gson.Gson;

import com.google.gson.JsonObject;

import org.greenrobot.eventbus.EventBus;

import org.json.JSONException;

import org.json.JSONObject;

import java.io.IOException;

import java.nio.charset.Charset;

import java.util.ArrayList;

import java.util.List;

import okhttp3.Cookie;

import okhttp3.CookieJar;

import okhttp3.FormBody;

import okhttp3.HttpUrl;

import okhttp3.Interceptor;

import okhttp3.MediaType;

import okhttp3.MultipartBody;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

import okhttp3.ResponseBody;

import okhttp3.logging.HttpLoggingInterceptor;

import okio.BufferedSource;

import retrofit2.Call;

import retrofit2.CallAdapter;

import retrofit2.Converter;

import retrofit2.Retrofit;

import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;

import retrofit2.converter.gson.GsonConverterFactory;

public class Network {

private static final String TAG = "Network";

private static APIService apis;

private static ReLoginService reLoginService;

private static Converter.Factory mExtraGsonConverterFactory = ExtraGsonConverterFactory.create();

private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJavaCallAdapterFactory.create();

public static APIService getAPIService() {

if (apis == null) {

// TODO 最后关闭日志

HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();

loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值