in src/main/java/com/aliyun/mns/client/impl/AbstractAction.java [273:313]
private String getSignature(RequestMessage request, String accessKeySecret) throws ClientException {
if (StringUtils.isBlank(accessKeySecret)) {
return null;
}
Map<String, String> headers = request.getHeaders();
StringBuffer canonicalizedMNSHeaders = new StringBuffer();
StringBuffer stringToSign = new StringBuffer();
String contentMd5 = safeGetHeader(MNSConstants.CONTENT_MD5, headers);
String contentType = safeGetHeader(MNSConstants.CONTENT_TYPE, headers);
String date = safeGetHeader(MNSConstants.DATE, headers);
String canonicalizedResource = getRelativeResourcePath(request
.getResourcePath());
TreeMap<String, String> tmpHeaders = sortHeader(request.getHeaders());
if (tmpHeaders.size() > 0) {
Set<String> keySet = tmpHeaders.keySet();
for (String key : keySet) {
if (key.toLowerCase().startsWith(
MNSConstants.X_HEADER_MNS_PREFIX)) {
canonicalizedMNSHeaders.append(key).append(":")
.append(tmpHeaders.get(key)).append("\n");
}
}
}
stringToSign.append(method).append("\n").append(contentMd5)
.append("\n").append(contentType).append("\n").append(date)
.append("\n").append(canonicalizedMNSHeaders)
.append(canonicalizedResource);
String signature;
try {
signature = ServiceSignature.create().computeSignature(
accessKeySecret, stringToSign.toString());
} catch (Exception e) {
throw new ClientException("Signature fail", userRequestId, e);
}
return signature;
}