最近更新时间:2026-02-04 19:02:18
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>auth</artifactId>
<version>2.40.12</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
<version>2.40.12</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>regions</artifactId>
<version>2.40.12</version>
</dependency>
</dependencies>
package demo;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.signer.Aws4Signer;
import software.amazon.awssdk.auth.signer.params.Aws4SignerParams;
import software.amazon.awssdk.http.*;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.regions.Region;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class KsyunIamAws4Demo {
// ====== 替换为你的 AK / SK ======
private static final String AK = "YourAccessKey";
private static final String SK = "YourSecretKey";
// ====== 金山云 IAM 固定参数 ======
private static final String SERVICE = "iam"; // 调用的服务
private static final String REGION = "cn-beijing-6"; // 机房
private static final String ENDPOINT = "https://iam.api.ksyun.com"; // 服务地址
public static void main(String[] args) throws Exception {
// 1. 构造查询参数(IAM API 规范)
Map<String, String> params = new HashMap<>();
params.put("Action", "ListUsers");
params.put("Version", "2015-11-01");
params.put("Marker", "1");
params.put("MaxItems", "100");
URI uri = URI.create(ENDPOINT);
// 2. 构建 HTTP GET 请求(QueryString)
SdkHttpFullRequest.Builder requestBuilder = SdkHttpFullRequest.builder()
.uri(uri)
.method(SdkHttpMethod.GET)
.putHeader("Host", uri.getHost())
.putHeader("Accept", "application/json");
// ⚠️ Query 参数必须 URL Encode
params.forEach((k, v) ->
requestBuilder.putRawQueryParameter(
URLEncoder.encode(k, StandardCharsets.UTF_8),
URLEncoder.encode(v, StandardCharsets.UTF_8)
)
);
SdkHttpFullRequest unsignedRequest = requestBuilder.build();
// 3. 使用 AWS4Signer 签名
Aws4Signer signer = Aws4Signer.create();
Aws4SignerParams signerParams = Aws4SignerParams.builder()
.awsCredentials(AwsBasicCredentials.create(AK, SK))
.signingName(SERVICE)
.signingRegion(Region.of(REGION))
.build();
SdkHttpFullRequest signedRequest =
signer.sign(unsignedRequest, signerParams);
// 4. 发送 HTTP 请求
try (SdkHttpClient httpClient = ApacheHttpClient.builder().build()) {
HttpExecuteRequest executeRequest = HttpExecuteRequest.builder()
.request(signedRequest)
.build();
HttpExecuteResponse response =
httpClient.prepareRequest(executeRequest).call();
System.out.println("HTTP Status: "
+ response.httpResponse().statusCode());
if (response.responseBody().isPresent()) {
String body = new BufferedReader(
new InputStreamReader(response.responseBody().get()))
.lines()
.collect(Collectors.joining("\n"));
System.out.println("Response Body:");
System.out.println(body);
}
}
}
}
package demo;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.signer.Aws4Signer;
import software.amazon.awssdk.auth.signer.params.Aws4SignerParams;
import software.amazon.awssdk.http.*;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.regions.Region;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class KsyunIamAws4PostDemo {
// ====== 替换为你的 AK / SK ======
private static final String AK = "YourAccessKey";
private static final String SK = "YourSecretKey";
// ====== 金山云 IAM 固定参数 ======
private static final String SERVICE = "iam"; // 调用的服务
private static final String REGION = "cn-beijing-6"; // 机房
private static final String ENDPOINT = "https://iam.api.ksyun.com"; // 服务地址
public static void main(String[] args) throws Exception {
// 1. POST 参数(IAM 要求)
Map<String, String> params = new HashMap<>();
params.put("Action", "CreateUser");
params.put("Version", "2015-11-01");
params.put("UserName", "test-user-001");
// 2. 构建 x-www-form-urlencoded Body(⚠️必须 encode)
String body = params.entrySet().stream()
.map(e -> encode(e.getKey()) + "=" + encode(e.getValue()))
.collect(Collectors.joining("&"));
byte[] bodyBytes = body.getBytes(StandardCharsets.UTF_8);
URI uri = URI.create(ENDPOINT);
// 3. 构建 HTTP POST 请求
SdkHttpFullRequest unsignedRequest = SdkHttpFullRequest.builder()
.uri(uri)
.method(SdkHttpMethod.POST)
.putHeader("Host", uri.getHost())
.putHeader("Content-Type", "application/x-www-form-urlencoded")
.putHeader("Accept", "application/json")
.contentStreamProvider(() -> new java.io.ByteArrayInputStream(bodyBytes))
.build();
// 4. AWS4 签名
Aws4Signer signer = Aws4Signer.create();
Aws4SignerParams signerParams = Aws4SignerParams.builder()
.awsCredentials(AwsBasicCredentials.create(AK, SK))
.signingName(SERVICE)
.signingRegion(Region.of(REGION))
.build();
SdkHttpFullRequest signedRequest =
signer.sign(unsignedRequest, signerParams);
// 5. 发送请求
try (SdkHttpClient httpClient = ApacheHttpClient.builder().build()) {
HttpExecuteRequest executeRequest = HttpExecuteRequest.builder()
.request(signedRequest)
.build();
HttpExecuteResponse response =
httpClient.prepareRequest(executeRequest).call();
System.out.println("HTTP Status: "
+ response.httpResponse().statusCode());
if (response.responseBody().isPresent()) {
String responseBody = new BufferedReader(
new InputStreamReader(response.responseBody().get()))
.lines()
.collect(Collectors.joining("\n"));
System.out.println("Response Body:");
System.out.println(responseBody);
}
}
}
private static String encode(String s) {
return URLEncoder.encode(s, StandardCharsets.UTF_8);
}
}
package demo;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.signer.Aws4Signer;
import software.amazon.awssdk.auth.signer.params.Aws4SignerParams;
import software.amazon.awssdk.http.*;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.regions.Region;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
public class Aws4PostJsonBodyDemo {
// ====== 替换为你的 AK / SK ======
private static final String AK = "YourAccessKey";
private static final String SK = "YourSecretKey";
// ====== 金山云 IAM 固定参数 ======
private static final String SERVICE = "iam"; // 调用的服务
private static final String REGION = "cn-beijing-6"; // 机房
private static final String ENDPOINT = "https://iam.api.ksyun.com"; // 服务地址
public static void main(String[] args) throws Exception {
// 1. JSON Body(示例)
String jsonBody = """
{
"Action": "ListUsers",
"Version": "2015-11-01"
}
""";
byte[] bodyBytes = jsonBody.getBytes(StandardCharsets.UTF_8);
URI uri = URI.create(ENDPOINT);
// 2. 构建 POST + JSON Body 请求
SdkHttpFullRequest unsignedRequest = SdkHttpFullRequest.builder()
.uri(uri)
.method(SdkHttpMethod.POST)
.putHeader("Host", uri.getHost())
.putHeader("Content-Type", "application/json")
.putHeader("Accept", "application/json")
.contentStreamProvider(() ->
new java.io.ByteArrayInputStream(bodyBytes))
.build();
// 3. AWS4 签名
Aws4Signer signer = Aws4Signer.create();
Aws4SignerParams signerParams = Aws4SignerParams.builder()
.awsCredentials(AwsBasicCredentials.create(AK, SK))
.signingName(SERVICE)
.signingRegion(Region.of(REGION))
.build();
SdkHttpFullRequest signedRequest =
signer.sign(unsignedRequest, signerParams);
// 4. 发送请求
try (SdkHttpClient httpClient = ApacheHttpClient.builder().build()) {
HttpExecuteRequest executeRequest = HttpExecuteRequest.builder()
.request(signedRequest)
.build();
HttpExecuteResponse response =
httpClient.prepareRequest(executeRequest).call();
System.out.println("HTTP Status: "
+ response.httpResponse().statusCode());
if (response.responseBody().isPresent()) {
String body = new BufferedReader(
new InputStreamReader(response.responseBody().get()))
.lines()
.collect(Collectors.joining("\n"));
System.out.println("Response Body:");
System.out.println(body);
}
}
}
}