在做一些需要给参数加密或签名时,需要对参数进行排序。某些项目会用到,安全性要求较高的。
/**
*
* @Title: formatParamMap
* @Description: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),生成需要MD5加密的url参数串
* @param @param paraMap
* @param @param urlEncode
* @param @param keyToLower
* @param @return 设定文件
* @return String 返回类型
* @date 2017年12月7日 上午11:28:03
* @throws
*/
public static String formatParamMap(Map<String, String> paraMap, boolean urlEncode,
boolean keyToLower) {
String buff = "";
Map<String, String> tmpMap = paraMap;
try {
List<Map.Entry<String, String>> infoIds =
new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet());
// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
return (o1.getKey()).toString().compareTo(o2.getKey());
}
});
// 构造URL 键值对的格式
StringBuilder buf = new StringBuilder();
for (Map.Entry<String, String> item : infoIds) {
if (StringUtils.isNotBlank(item.getKey())) {
String key = item.getKey();
String val = item.getValue();
if (urlEncode) {
val = URLEncoder.encode(val, Constants.CHARSET);
}
if (keyToLower) {
buf.append(key.toLowerCase() + "=" + val);
} else {
buf.append(key + "=" + val);
}
buf.append("&");
}
}
buff = buf.toString();
if (buff.isEmpty() == false) {
buff = buff.substring(0, buff.length() - 1);
}
} catch (Exception e) {
return null;
}
return buff;
}
/**
*
* @Title: formatParamMap
* @Description: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),生成需要MD5加密的url参数串
* @param @param paraMap
* @param @param urlEncode
* @param @param keyToLower
* @param @return 设定文件
* @return String 返回类型
* @date 2017年12月7日 上午11:28:03
* @throws
*/
public static String formatParamMap(Map<String, String> paraMap, boolean urlEncode,
boolean keyToLower) {
String buff = "";
Map<String, String> tmpMap = paraMap;
try {
List<Map.Entry<String, String>> infoIds =
new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet());
// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
return (o1.getKey()).toString().compareTo(o2.getKey());
}
});
// 构造URL 键值对的格式
StringBuilder buf = new StringBuilder();
for (Map.Entry<String, String> item : infoIds) {
if (StringUtils.isNotBlank(item.getKey())) {
String key = item.getKey();
String val = item.getValue();
if (urlEncode) {
val = URLEncoder.encode(val, Constants.CHARSET);
}
if (keyToLower) {
buf.append(key.toLowerCase() + "=" + val);
} else {
buf.append(key + "=" + val);
}
buf.append("&");
}
}
buff = buf.toString();
if (buff.isEmpty() == false) {
buff = buff.substring(0, buff.length() - 1);
}
} catch (Exception e) {
return null;
}
return buff;
}