Java 根据 Map 的 key 的 ASCII 码从小到大排序
当前主流的公有云,如亚马逊、阿里云、腾讯云,其API的访问都支持使用签名信息,以验证请求者的身份。而生成签名信息的第一步,就是对请求参数进行排序,按照ASCII码升序排列。下面示例将展示,Java 环境下,如何对请求参数进行ASCII码的升序排序。import java.util.Arrays;import java.util.HashMap;import java.util....
·
当前主流的公有云,如亚马逊、阿里云、腾讯云,
其API的访问都支持使用签名信息,以验证请求者的身份。
而生成签名信息的第一步,
就是对请求参数进行排序,按照ASCII码升序排列。
下面示例将展示,Java 环境下,如何对请求参数进行ASCII码的升序排序。
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Test3 {
public static void main(String[] args) {
// 方式一:TreeMap可以自动排序
TreeMap<String, Object> params = new TreeMap<String, Object>();
setData(params);
StringBuilder s1 = new StringBuilder();
for (String key : params.keySet()) {
s1.append(key).append("=").append(params.get(key)).append("&");
}
s1.deleteCharAt(s1.length() - 1);
System.out.println(s1);
//方式二:使用HashMap,并使用Arrays.sort排序
HashMap<String, Object> params2 = new HashMap<String, Object>();
setData(params2);
String[] sortedKeys = params2.keySet().toArray(new String[]{});
Arrays.sort(sortedKeys);// 排序请求参数
StringBuilder s2 = new StringBuilder();
for (String key : sortedKeys) {
s2.append(key).append("=").append(params2.get(key)).append("&");
}
s2.deleteCharAt(s2.length() - 1);
System.out.println(s2);
System.out.println(s1.toString().equals(s2.toString()));
}
private static void setData(Map<String,Object> params){
params.put("Nonce", 11886);
params.put("Timestamp", 1465185768);
params.put("SecretId", "AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE");
params.put("Action", "DescribeInstances");
params.put("Version", "2017-03-12");
params.put("Region", "ap-guangzhou");
params.put("Limit", 20);
params.put("Offset", 0);
params.put("测试", "测试");
}
}
输出结果:
Action=DescribeInstances&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE&Timestamp=1465185768&Version=2017-03-12&测试=测试
Action=DescribeInstances&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE&Timestamp=1465185768&Version=2017-03-12&测试=测试
更多推荐
已为社区贡献1条内容
所有评论(0)