81,095
社区成员
发帖
与我相关
我的任务
分享
Map param = new HashMap<>();
param.put("SignatureVersion", 1.0);
param.put("Format", "JSON");
param.put("Timestamp", LocalDateTime.now(ZoneId.of("UTC")).format(dtf));
param.put("RegionId", "cn-shanghai");
param.put("AccessKeyId", accessId);
param.put("SignatureMethod", "HMAC-SHA1");
param.put("Version", "2014-05-15");
param.put("LoadBalancerId", loadId);
param.put("Action", "SetBackendServers");
param.put("SignatureNonce", UUID.randomUUID().toString());
param.put("BackendServers", "[{\"ServerId\":\"" + serverId + "\",\"Weight\":\"" + weight + "\"}]");
List<String> keyList = new ArrayList(param.keySet());
Collections.sort(keyList);
List<String> paramList = new ArrayList<>();
for (String key : keyList) {
paramList.add(String.format("%s=%s", key, URLEncoder.encode(param.get(key).toString(), "UTF-8")));
}
String stringToSign = "GET" + "&" + URLEncoder.encode("/", "UTF-8")
+ "&" + URLEncoder.encode(StringUtils.join(paramList, "&"), "UTF-8");
String sign = EncodeUtil.HmacSHA1AndBase64(stringToSign, securityId);
paramList.add(String.format("%s=%s", "Signature", URLEncoder.encode(sign, "UTF-8")));
URL url = new URL("http://slb.aliyuncs.com/?" + StringUtils.join(paramList, "&"));
使用的jdk8的时间类
private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
加密的类也是网上拿过来用的,应该都是差不多的
public static String HmacSHA1AndBase64(String encryptText, String encryptKey) throws Exception {
byte[] data=encryptKey.getBytes("UTF-8");
//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKey secretKey = new SecretKeySpec(data, "HmacSHA1");
//生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance("HmacSHA1");
//用给定密钥初始化 Mac 对象
mac.init(secretKey);
byte[] text = encryptText.getBytes("UTF-8");
//完成 Mac 操作
return Base64.encodeBase64String(mac.doFinal(text));
}
中间有个key排序的过程,阿里云的加密应该都是差不多的。你看看 能不能帮到你