全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

JAVA

最近更新时间:2024-08-12 10:30:23

java签名DEMO如下:

package example;

import org.apache.commons.codec.binary.Hex;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;

public class KsyunIamClient {

    private static final String AK = "Your AK"; // 请替换为您的AccessKey
    private static final String SK = "Your SK"; // 请替换为您的SecretKey
    private static final String SERVIER = "iam"; //访问的服务
    private static final String REGION = "cn-beijing-6"; // 访问的区域

    private static final String API_URL = "http://iam.api.ksyun.com"; // 接口地址

    private static final String HOST = "iam.api.ksyun.com"; // 请求头Host

    public static void main(String[] args) throws Exception {
        String action = "ListUsers"; // 接口名称
        String version = "2015-11-01"; // 接口版本

        Map<String, String> params = new LinkedHashMap<>();

        // 固定参数
        params.put("Accesskey", AK);
        params.put("Service", SERVIER);
        params.put("Region", REGION);
        params.put("Action", action);
        params.put("Version", version);
        params.put("Timestamp", getUTCTime());
        params.put("SignatureVersion", "1.0");
        params.put("SignatureMethod", "HMAC-SHA256");

        // 接口参数
        params.put("Marker", "1");
        params.put("MaxItems", "100");

        String signature = sign(params, SK);

        StringBuilder requestURL = new StringBuilder(API_URL + "?");
        for (Map.Entry<String, String> entry : params.entrySet()) {
            requestURL.append(URLEncoder.encode(entry.getKey(), "UTF-8"))
                    .append("=")
                    .append(URLEncoder.encode(entry.getValue(), "UTF-8"))
                    .append("&");
        }
        requestURL.append("Signature=").append(URLEncoder.encode(signature, "UTF-8"));

        HttpClient client = HttpClients.createDefault();
        HttpGet request = new HttpGet(requestURL.toString());

        // 设置请求头
        request.setHeader(HttpHeaders.ACCEPT, "application/json");
        request.setHeader(HttpHeaders.HOST, HOST);

        // 发送请求并处理响应
        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            String responseBody = EntityUtils.toString(entity);
            System.out.println("Response Status: " + response.getStatusLine());
            System.out.println("Response Body: " + responseBody);
        }
    }

    private static String sign(Map<String, String> params, String secretKey) throws Exception {
        List<String> keys = new ArrayList<>(params.keySet());
        Collections.sort(keys);

        StringBuilder paramStr = new StringBuilder();
        for (String key : keys) {
            paramStr.append(URLEncoder.encode(key, "UTF-8"))
                    .append("=")
                    .append(URLEncoder.encode(params.get(key), "UTF-8"))
                    .append("&");
        }
        paramStr.deleteCharAt(paramStr.length() - 1);

        Mac hmac = Mac.getInstance("HmacSHA256");
        SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
        hmac.init(secretKeySpec);
        byte[] hash = hmac.doFinal(paramStr.toString().getBytes(StandardCharsets.UTF_8));
        return Hex.encodeHexString(hash);
    }

    private static String getUTCTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        return sdf.format(new Date());
    }
}

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈