Okhttp3-编写GET/POST下的Token自动检查并刷新的拦截器(同时适配Okgo库)

自动检查token的有效性并刷新无效token的需求在项目中很常见,下面是在项目中用到的Okttp3 Token拦截器,实现了

  • 在GET请求下,自动检查token的有效性,并对原有的token参数进行替换更新
  • 在POST请求下,自动检查token的有效性,取出FormBody中原有的请求参数,替换原有的token参数
public class OkTokenInterceptor implements Interceptor
{
    private static final String LOG = OkTokenInterceptor.class.getSimpleName();
    private static final Charset UTF_8 = Charset.forName("UTF-8");

    @Override
    public Response intercept(Chain chain) throws IOException
    {
        Request originalRequest = chain.request();

        HttpUrl originalHttpUrl = originalRequest.url();
        String originalUrl = originalHttpUrl.url().toString();
        String method = originalRequest.method();

        Logger.i(LOG, "originalUrl-->" + originalUrl);
        Logger.i(LOG, "method-->" + originalRequest.method());

        final Response originalResponse = chain.proceed(originalRequest);
        // 获取返回的数据字符串
        ResponseBody responseBody = originalResponse.body();
        BufferedSource source = originalResponse.body().source();
        source.request(Integer.MAX_VALUE);
        Buffer buffer = source.buffer();
        Charset charset = UTF_8;
        MediaType contentType = responseBody.contentType();
        if (contentType != null)
        {
            charset = contentType.charset();
            charset = charset == null ? UTF_8 : charset;
        }
        String bodyString = buffer.clone().readString(charset);

        Logger.i(LOG, "拦截前:" + bodyString);

        final String token = DatabaseUtils.getInstance().getToken();
        Logger.i(LOG, "当前的token:" + token);

        //排除登录的API
        if (!originalUrl.equals(EcConstant.LOGIN_API))
        {
            if (!TextUtils.isEmpty(token))
            {
                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(EcConstant.BASE_URL)
                        .addConverterFactory(ScalarsConverterFactory.create())
                        .client(new OkHttpClient())
                        .build();

                TokenApi api = retrofit.create(TokenApi.class);

                Call<String> checkTokencall = api.get(EcConstant.CHECK_TOKEN_API + "token/" + token + "/");

                String checkTokenResponse = checkTokencall.execute().body(); // 同步

                Logger.i(LOG, "checkTokencall-->" + checkTokenResponse)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值