| | |
| | | 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; |
| | |
| | | return OssTypeEnum.MINIO.getType(); |
| | | } |
| | | |
| | | @Override |
| | | public CredentialsDTO getCredentials() { |
| | | |
| | | public CredentialsDTO getCredentials1111() { |
| | | try { |
| | | AssumeRoleProvider provider = new AssumeRoleProvider(endpoint, accessKey, |
| | | secretKey, Math.toIntExact(OssConfiguration.expire), |
| | |
| | | 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 |
| | |
| | | @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 |