zhaowenyu
2025-10-29 7077d3a7819de3229482e5a9edb4bd895ea2a49f
ard-oss/src/main/java/com/ard/oss/service/impl/MinIOServiceImpl.java
@@ -22,6 +22,7 @@
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.ProviderException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Objects;
@@ -44,8 +45,8 @@
        return OssTypeEnum.MINIO.getType();
    }
    @Override
    public CredentialsDTO getCredentials() {
    public CredentialsDTO getCredentials1111() {
        try {
            AssumeRoleProvider provider = new AssumeRoleProvider(endpoint, accessKey,
                    secretKey, Math.toIntExact(OssConfiguration.expire),
@@ -56,6 +57,53 @@
            e.printStackTrace();
        }
        return null;
    }
    @Override
    public CredentialsDTO getCredentials() {
        try {
            // 创建自签证书的 OkHttpClient
            TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[] chain, String authType) {}
                        @Override
                        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
                        @Override
                        public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
                    }
            };
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, trustAllCerts, new SecureRandom());
            OkHttpClient httpClient = new OkHttpClient.Builder()
                    .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0])
                    .hostnameVerifier((hostname, session) -> true)
                    .build();
            // 构建 AssumeRoleProvider,使用自定义 httpClient
            AssumeRoleProvider provider = new AssumeRoleProvider(
                    endpoint,
                    accessKey,
                    secretKey,
                    Math.toIntExact(OssConfiguration.expire),
                    null,
                    OssConfiguration.region,
                    null,
                    null,
                    null,
                    httpClient
            );
            // 获取 STS 凭证
            var stsCredentials = provider.fetch();
            return new CredentialsDTO(stsCredentials, OssConfiguration.expire);
        } catch (ProviderException e) {
            log.error("Failed to parse STS response", e);
            throw new RuntimeException("STS response parse failed", e);
        } catch (NoSuchAlgorithmException | java.security.KeyManagementException e) {
            log.error("Failed to create custom SSL context", e);
            throw new RuntimeException("SSL setup failed", e);
        }
    }
    @Override
@@ -79,13 +127,28 @@
    @Override
    public Boolean deleteObject(String bucket, String objectKey) {
        try {
            client.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(objectKey).build());
        } catch (MinioException | NoSuchAlgorithmException | IOException | InvalidKeyException e) {
            log.error("Failed to delete file.");
            e.printStackTrace();
            // 检查文件是否存在
            client.statObject(StatObjectArgs.builder()
                    .bucket(bucket)
                    .object(objectKey)
                    .build());
            // 文件存在,执行删除
            client.removeObject(RemoveObjectArgs.builder()
                    .bucket(bucket)
                    .object(objectKey)
                    .build());
            log.info("成功删除文件: {}/{}", bucket, objectKey);
            return true;
        } catch (ErrorResponseException e) {
            // 文件不存在的情况
            log.warn("文件不存在: {}/{}", bucket, objectKey);
            return false;
        } catch (Exception e) {
            log.error("删除文件失败: {}/{}", bucket, objectKey, e);
            throw new RuntimeException("删除文件失败: " + e.getMessage(), e);
        }
        return true;
    }
    @Override