/** * 认证字符串 * * @param publicKey 公钥 * @param signature 签名 * @return 认证字符串 */ public static String authorization(String publicKey, String signature) { return StrUtil.builder() .append("UCloud ") .append(publicKey) .append(":") .append(signature) .toString(); }
/** * 用于签名的标准Ucloud头信息字符串,尾部带换行符 * * @param request Http请求 * @return 用于签名的Ucloud头信息字符串 */ public static String canonicalizedUcloudHeaders(HttpRequest request) { Param param = Param.create(); Map<String, String[]> headers = request.headers(); String[] value; for (Entry<String, String[]> headerEntry : headers.entrySet()) { String name = headerEntry.getKey().toLowerCase(); if (name.startsWith("x-ucloud-")) { value = headerEntry.getValue(); if (value != null && value.length > 0) { param.set(name, value[0]); } } } StringBuilder builder = StrUtil.builder(); for (Entry<String, Object> entry : param.entrySet()) { builder.append(entry.getKey()).append(":").append(entry.getValue()).append("\n"); } return builder.toString(); }
/** * 用于签名的字符串 * * @param bucket Bucket * @param key 文件key * @param contentMd5 内容的md5值 * @param date 日期 * @param request 请求对象 * @return 用于签名的字符串 */ public static String strToSign( String bucket, String key, String contentMd5, String date, HttpRequest request) { String contentType = request.contentType(); if (StrUtil.isBlank(contentType)) { contentType = "text/plain"; request.contentType(contentType); log.warn("Content-Type header is empty, use default Content-Type: {}", contentType); } return StrUtil.builder() .append(request.method()) .append("\n") .append(StrUtil.nullToEmpty(contentMd5)) .append("\n") .append(contentType) .append("\n") .append(StrUtil.nullToEmpty(date)) .append("\n") .append(canonicalizedUcloudHeaders(request)) // canonicalizedUcloudHeaders尾部带一个换行符 .append(canonicalizedResource(bucket, key)) .toString(); }
/** * 用于签名的标准资源字符串 * * @param bucket Bucket * @param key 文件的key(在Ufile中的文件名) * @return 标准资源字符串 */ public static String canonicalizedResource(String bucket, String key) { return StrUtil.builder().append("/").append(bucket).append("/").append(key).toString(); }