Android-Okhttp 拦截token过期跳转登录页面

碰到一个需求, 需要全局拦截掉登录信息. 但是, 每个请求里面都写, 有点丑.

目标:

1. 需要在拦截器里

2. 需要获取到response的信息

3. 需要返回不同的response.

 

public class TokenInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {


        Request request = chain.request();
        Response response = chain.proceed(request);

        ResponseBody responseBody = response.body();
        if (responseBody != null) {
            BufferedSource source = responseBody.source();
            source.request(Long.MAX_VALUE); // Buffer the entire body.
            Buffer buffer = source.buffer();
            try {
                String result = buffer.clone().readString(StandardCharsets.UTF_8);
                JSONObject jsonObject = new JSONObject(result);
                int code = jsonObject.getInt("code");
                if (/*你妈妈不准你上网*/) {
                    boolean isLogin = SharedPreferencesUtils.get(Constants.USER, Constants.UserInfo.IS_LOGIN, false);
                    // 你妈妈不准你上网
                    if (isLogin) {
                        // 刷新信息
                        RxBus.get().post(new UserTokenExpiredEvent());

                    }
                    return new okhttp3.Response.Builder()
                            .code(code) // 其实code可以随便给
                            .protocol(Protocol.HTTP_2)
                            .message(jsonObject.optString("msg", ""))
                            .body(ResponseBody.create(MediaType.get("text/html; charset=utf-8"), "")) // 返回空页面
                            .request(chain.request())
                            .build();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return response;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值