public String signRequest()

in src/main/java/com/aliyun/openservices/log/http/signer/SlsV4Signer.java [188:244]


    public String signRequest(Map<String, String> headers, HttpMethod httpMethod,
                              String resourceUri, Map<String, String> urlParams,
                              byte[] body, String dateTime) {
        Credentials credentials = credentialsProvider.getCredentials();
        addHeaderSecurityToken(credentials.getSecurityToken(), headers);

        String contentSha256;
        if (body != null && body.length > 0) {
            headers.put(Consts.CONST_CONTENT_LENGTH, String.valueOf(body.length));
            contentSha256 = BinaryUtil.toHex(BinaryUtil.calculateSha256(body));
        } else {
            headers.put(Consts.CONST_CONTENT_LENGTH, Consts.EMPTY_STRING_LENGTH);
            contentSha256 = Consts.EMPTY_STRING_SHA256;
        }
        headers.put(Consts.X_LOG_DATE, dateTime);
        headers.put(Consts.X_LOG_CONTENT_SHA256, contentSha256);
        Map<String, String> canonicalHeaders = new TreeMap<String, String>();
        StringBuilder signedHeaders = new StringBuilder();
        for (Map.Entry<String, String> header : headers.entrySet()) {
            String key = header.getKey().toLowerCase();
            if (DEFAULT_SIGNED_HEADERS.contains(key)
                    || key.startsWith(Consts.CONST_X_SLS_PREFIX)
                    || key.startsWith(Consts.CONST_X_ACS_PREFIX)) {
                canonicalHeaders.put(key, header.getValue());
            }
        }
        StringBuilder headersToString = new StringBuilder();
        for (Map.Entry<String, String> header : canonicalHeaders.entrySet()) {
            if (signedHeaders.length() > 0) {
                signedHeaders.append(";");
            }
            String headerKey = header.getKey();
            signedHeaders.append(headerKey);
            headersToString.append(headerKey)
                    .append(":")
                    .append(HttpUtil.trim(header.getValue()))
                    .append(NEW_LINE);
        }
        String signedHeadersStr = signedHeaders.toString();
        String canonicalRequest = buildCanonicalRequest(httpMethod.toString(),
                resourceUri, urlParams, headersToString.toString(), signedHeadersStr, contentSha256);
        String date = dateTime.substring(0, 8);
        String scope = buildScope(date);
        String stringToSign = buildStringToSign(canonicalRequest, dateTime, scope);
        Mac mac = getMacInstance();
        HmacSHA256Hasher sha256Hasher = new HmacSHA256Hasher(mac);
        byte[] signingKey = buildSigningKey(sha256Hasher, credentials.getAccessKeySecret(), region, date);
        byte[] result = sha256Hasher.hash(signingKey, stringToSign.getBytes(CHARSET_UTF_8));
        String signature = BinaryUtil.toHex(result);
        String authorization = buildAuthorization(credentials.getAccessKeyId(), signature, scope);
//        System.out.println("canonicalRequest:\n" + canonicalRequest);
//        System.out.println("stringToSign:\n" + stringToSign);
//        System.out.println("signingKey:\n" + BinaryUtil.toHex(signingKey));
//        System.out.println("signature:\n" + signature);
//        System.out.println("authorization:\n" + authorization);
        return authorization;
    }