package com.ard.sample.utils;
|
|
import com.ard.oss.model.CredentialsDTO;
|
import io.minio.credentials.AssumeRoleProvider;
|
import lombok.extern.slf4j.Slf4j;
|
import okhttp3.ConnectionPool;
|
import okhttp3.OkHttpClient;
|
import org.springframework.stereotype.Component;
|
|
import java.security.NoSuchAlgorithmException;
|
import java.security.ProviderException;
|
import java.util.concurrent.TimeUnit;
|
|
import static com.ard.sample.config.DockConfiguration.*;
|
|
/**
|
* 获取http的STS凭证的工具类,用于简化STS临时凭证的获取过程。
|
*/
|
@Slf4j
|
@Component
|
public class MinioStsUtils {
|
|
public CredentialsDTO getCredentials() {
|
try {
|
// 构建适配HTTP协议的OkHttpClient(移除所有SSL相关配置)
|
OkHttpClient httpClient = new OkHttpClient.Builder()
|
// 保留原代码的连接池配置(禁用连接复用,如需复用可删除此行)
|
.connectionPool(new ConnectionPool(0, 1, TimeUnit.SECONDS))
|
.build();
|
|
// 构建 AssumeRoleProvider,使用简化后的HTTP客户端
|
AssumeRoleProvider provider = new AssumeRoleProvider(
|
endpoint, // 注意:此处endpoint需改为HTTP地址(如 http://sts.example.com)
|
accessKey, // 主账号AccessKey
|
secretKey, // 主账号SecretKey
|
Math.toIntExact(expire), // 凭证过期时间(转int)
|
null, // 可选参数(如RoleArn,根据实际SDK调整)
|
region, // 地域(如cn-hangzhou)
|
null, null, null, // 其他可选参数
|
httpClient // 传入HTTP版本的OkHttpClient
|
);
|
|
// 获取 STS 临时凭证
|
var stsCredentials = provider.fetch();
|
return new CredentialsDTO(stsCredentials, expire);
|
|
} catch (ProviderException e) {
|
log.error("Failed to fetch/parse STS response (HTTP access)", e);
|
throw new RuntimeException("STS response parse failed", e);
|
} catch (NoSuchAlgorithmException e) {
|
log.error("Failed to fetch/parse STS response (HTTP access)", e);
|
throw new RuntimeException(e);
|
}
|
}
|
}
|