in src/main/java/com/aliyun/oss/internal/SignUtils.java [51:101]
public static String buildCanonicalString(String method, String resourcePath, RequestMessage request,
String expires) {
StringBuilder canonicalString = new StringBuilder();
canonicalString.append(method).append(SignParameters.NEW_LINE);
Map<String, String> headers = request.getHeaders();
TreeMap<String, String> headersToSign = new TreeMap<String, String>();
if (headers != null) {
for (Entry<String, String> header : headers.entrySet()) {
if (header.getKey() == null) {
continue;
}
String lowerKey = header.getKey().toLowerCase();
if (lowerKey.equals(HttpHeaders.CONTENT_TYPE.toLowerCase())
|| lowerKey.equals(HttpHeaders.CONTENT_MD5.toLowerCase())
|| lowerKey.equals(HttpHeaders.DATE.toLowerCase())
|| lowerKey.startsWith(OSSHeaders.OSS_PREFIX)) {
headersToSign.put(lowerKey, header.getValue().trim());
}
}
}
if (!headersToSign.containsKey(HttpHeaders.CONTENT_TYPE.toLowerCase())) {
headersToSign.put(HttpHeaders.CONTENT_TYPE.toLowerCase(), "");
}
if (!headersToSign.containsKey(HttpHeaders.CONTENT_MD5.toLowerCase())) {
headersToSign.put(HttpHeaders.CONTENT_MD5.toLowerCase(), "");
}
// Append all headers to sign to canonical string
for (Map.Entry<String, String> entry : headersToSign.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (key.startsWith(OSSHeaders.OSS_PREFIX)) {
canonicalString.append(key).append(':').append(value);
} else {
canonicalString.append(value);
}
canonicalString.append(SignParameters.NEW_LINE);
}
// Append canonical resource to canonical string
canonicalString.append(buildCanonicalizedResource(resourcePath, request.getParameters()));
return canonicalString.toString();
}