需求说明
需要根据返回的数据里面的状态码code做相应的动作;
例如:
401 ------>> 没有登录 ------>> 提示用户登录
403 ------>> 被迫下线 ------>> 提示用户当前账号在其他设备上登录,当前设备被迫下线
403 ------>> 登录过期 ------>> 提示用户重新登录
......
1.过滤器代码
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if (response.code() == 401 || response.code() == 403 || response.code() == 700) {
UserManager.removeUser();
UserManager.removeToken();
LoginActivity.open(MyApplication.getApplication());
}
return response;
}
}
2.调用
public Call sendGetReqeust(String requestUrl) {
try {
if (NetworkUtils.isConnected()) {
ConnectionPool connectionPool = new ConnectionPool(CONNECTION_POOL_MAX_IDEL, CONNECTION_POOL_KEEP_ALIVE, TimeUnit.MINUTES);
TrustAllManager trustAllManager = new TrustAllManager();
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new TokenInterceptor())
.connectionPool(connectionPool)
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.sslSocketFactory(createTrustAllSSLFactory(trustAllManager), trustAllManager)
.hostnameVerifier(createTrustAllHostnameVerifier())
.retryOnConnectionFailure(true)
.build();
String token = SPUtils.getInstance().getString(Constants.TOKEN);
Request request = new Request.Builder()
.url(requestUrl)
.addHeader("token", token)
.get()
.build();
Call call = okHttpClient.newCall(request);
return call;
}
return null;
} catch (Exception e) {
EventBus.getDefault().post(new DataEvent(DataEvent.Type.NET_WORK_ERR, e.toString()));
return null;
}
}