美文网首页
Retrofit的所有接口添加一个签名字段(值为原有键值对的MD

Retrofit的所有接口添加一个签名字段(值为原有键值对的MD

作者: jdallen | 来源:发表于2019-04-19 10:00 被阅读0次

难点:获取已有的键值对
目标:获取已有的键值对,组成字符串加密后,新增一个字段signature,值为加密后的字符串。

import android.support.annotation.NonNull;
import android.support.v4.util.ArrayMap;

import com.linkfun.mpos.util.SignUtil;

import java.io.IOException;
import java.util.List;
import java.util.Set;

import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 对已有的接口多添加一个签名字段
 *
 * @author jdallen
 * @since 2019/4/2
 */

public class AddParameterInterceptor implements Interceptor {

    @Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        Request oldRequest = chain.request();
        HttpUrl oldHttpUrl = oldRequest.url();
        //构建签名字段的值
        ArrayMap<String, String> signParams = new ArrayMap<>();
        //todo 现仅支持Get方法
        if (oldRequest.method().equals("GET")) {
            Set<String> nameList = oldHttpUrl.queryParameterNames();//获取所有的键
            for (String name : nameList) {
                List<String> valueList = oldHttpUrl.queryParameterValues(name);//获取指定键名的值
                if (null != valueList && valueList.size() > 0) {
                    signParams.put(name, valueList.get(0));
                } else {
                    signParams.put(name, null);
                }
            }
        }
        String signature = SignUtil.signMap(signParams);
        //新增签名字段
        HttpUrl url = oldHttpUrl.newBuilder()
                .addQueryParameter("signature", signature)
                .build();
        // Request customization: add request headers
        Request.Builder requestBuilder = oldRequest.newBuilder().url(url);
        return chain.proceed(requestBuilder.build());
    }
}

相关文章

  • Retrofit的所有接口添加一个签名字段(值为原有键值对的MD

    难点:获取已有的键值对目标:获取已有的键值对,组成字符串加密后,新增一个字段signature,值为加密后的字符串。

  • hash类型操作1

    hash 类型 hash值格式与 键值对相似, 称为 字段 和 值,并且字段不重复 例子: HSET 添加hash...

  • string类型操作1

    SET (添加String类型的 键值对) set 命令 用于添加键值对,值 为string类型 语法: set ...

  • MongoDB 系列 - 高级操作(4)

    一、字段的操作 添加字段并设置默认值 更新一个字段的值为另外一个字段的值,modifyTime使用updateTi...

  • Rxjava结合Retrofit

    一. 添加依赖 二. 定义请求接口,转换HTTPAPI为Java接口 三. 接着使用类Retrofit生成 接口的...

  • Redis学习笔记--strings类型及操作1

    set设置key 对应的值为string 类型的value。例如我们添加一个name= HongWan 的键值对,...

  • 微信支付-验证签名失败

    1.统一下单接口返回的数据,除去sign字段,其他字段按ASCII码排序,使用MD5再一次签名 2.保证WXPay...

  • go reflection

    1. 接口描述 一个接口变量类型里面存储一个键值对: 赋给接口变量的具体值,该值对应的类型描述。举个例子: r 包...

  • Android接入微信支付errorCode:-1

    一、APP签名 在开放平台绑定商户的应用签名为签名文件中的MD5值,而非sha1。并且要去掉中间所有的 " : "...

  • Hive添加或删除字段

    官方文档关于Add/ReplaceColumns操作的说明 原有数据在新增一个或多个字段后,会将新增字段的值设置为...

网友评论

      本文标题:Retrofit的所有接口添加一个签名字段(值为原有键值对的MD

      本文链接:https://www.haomeiwen.com/subject/jycnbqtx.html