OkGo 拦截器实现更新token


public class MyApplication extends Application {

public static MyApplication INSTANCE; @Override public void onCreate() { super.onCreate(); INSTANCE = this; OkGo.getInstance().init(this); /** * 加载证书 */
        try { HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(getAssets().open("xxxx.cer")); OkHttpClient builder = new OkHttpClient.Builder() .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager) .hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }) .addInterceptor(new MyInterceptor()) .build(); OkGo.getInstance().setOkHttpClient(builder); }catch (Exception e){ e.printStackTrace(); } } }

拦截器

public class MyInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {

        String url = chain.request().url().toString();
        Log.e("MyInterceptor", "--------------"+url+"---------------");
        Log.e("调用之前expireTime", "--------------"+GetUserInfo.getTokenExpireTimeString()+"---------------");
        Request originalRequest  = chain.request();
        Response originalResponse = chain.proceed(originalRequest);
        JSONObject jsonObject = resultResponse(originalResponse);
        Log.e("Response", "--------------"+jsonObject.toJSONString()+"---------------");
        if (null != jsonObject){
            Integer code = jsonObject.getInteger("code");
            if (NOT_CERTIFIED.equals(code)){
                Response response401 = updateToken();
                JSONObject jsonObject401 = resultResponse(response401);
                Integer code401 = jsonObject401.getInteger("code");
                Log.e("jsonObject401", "--------------"+jsonObject401.toJSONString()+"---------------");
                if (SUCCESS.equals(code401)){
                    String data401 = jsonObject401.getString("data");
                    LoginUserInfo loginUserInfo = JSON.parseObject(data401,LoginUserInfo.class);
                    SharedPreferencesUtil.putData(USER_INFO,loginUserInfo);
                    Log.e("更新loginUserInfo", "--------------"+JSON.toJSONString(loginUserInfo)+"---------------");
                    Log.e("调用之后expireTime", "--------------"+GetUserInfo.getTokenExpireTimeString()+"---------------");
                    Request updateRequest = originalRequest.newBuilder()
                            .header("auth-token", loginUserInfo.getToken()).build();
                    Response updateResponse = chain.proceed(updateRequest);
                    return updateResponse;
                }else {
                    SharedPreferencesUtil.cleanByKey(USER_INFO);
                    SharedPreferencesUtil.cleanByKey(ENCRYPTION_LOGIN_PASSWORD);
                    SharedPreferencesUtil.cleanByKey(USER_ADDRESS);
                    SharedPreferencesUtil.cleanByKey(DEVICE_ID);
                    Intent intent= new Intent(MyApplication.INSTANCE, LoginErrorActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    MyApplication.INSTANCE.startActivity(intent);
                }
            }
        }
        return originalResponse;
    }
    /**
     * @Author AlanMa
     * @Description 重新登录获取token
     * @Date 2020/5/8
     */
    public Response updateToken() throws IOException {
        return OkGo.<String>get(CHECK_TOKEN)
                .tag(this)
                .params("xxx", "ccc")
                .params("bbb", "ccccffff")
                .params("cccc", "adafdafd")
                .execute();
    }

    /**
     * @Author AlanMa
     * @Description 取Response值
     * @Date 2020/5/17
     * @Param [response]
     * @return com.alibaba.fastjson.JSONObject
     */
    public JSONObject resultResponse(Response response){

        try {
            ResponseBody responseBody = response.body();
            long contentLength = responseBody.contentLength();
            BufferedSource source = responseBody.source();
            source.request(Long.MAX_VALUE);
            Buffer buffer = source.buffer();
            if (contentLength != 0) {
                Charset charset = UTF8;
                String result = buffer.clone().readString(charset);
                JSONObject jsonObject = JSON.parseObject(result);
                return jsonObject;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM