Переглянути джерело

添加 OssConfig, 将 aliyun-oss 相关配置存储到数据库, 避免敏感数据出现在配置文件中

reghao 9 місяців тому
батько
коміт
0b8170a5ec

+ 11 - 0
mgr/src/main/java/cn/reghao/devops/mgr/admin/db/repository/OssConfigRepository.java

@@ -0,0 +1,11 @@
+package cn.reghao.devops.mgr.admin.db.repository;
+
+import cn.reghao.devops.mgr.admin.model.po.OssConfig;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author reghao
+ * @date 2025-06-06 09:46:54
+ */
+public interface OssConfigRepository extends JpaRepository<OssConfig, Integer> {
+}

+ 31 - 0
mgr/src/main/java/cn/reghao/devops/mgr/admin/model/po/OssConfig.java

@@ -0,0 +1,31 @@
+package cn.reghao.devops.mgr.admin.model.po;
+
+import cn.reghao.devops.mgr.util.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * @author reghao
+ * @date 2025-06-06 09:46:18
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Setter
+@Getter
+@Entity
+@Table(name = "sys_oss_config")
+public class OssConfig extends BaseEntity {
+    @Column(nullable = false, unique = true)
+    private String endpoint;
+    @Column(nullable = false)
+    private String accessKeyId;
+    @Column(nullable = false)
+    private String accessKeySecret;
+    private String bucketName;
+}

+ 0 - 4
mgr/src/main/java/cn/reghao/devops/mgr/config/AppProperties.java

@@ -15,8 +15,4 @@ import org.springframework.context.annotation.Configuration;
 @ConfigurationProperties(prefix = "app")
 public class AppProperties {
     private String baseDir;
-    private String endpoint;
-    private String bucketName;
-    private String accessKeyId;
-    private String accessKeySecret;
 }

+ 4 - 4
mgr/src/main/java/cn/reghao/devops/mgr/config/AppLifecycle.java → mgr/src/main/java/cn/reghao/devops/mgr/config/SpringLifecycle.java

@@ -27,7 +27,7 @@ import java.util.List;
  */
 @Slf4j
 @Component
-public class AppLifecycle implements ApplicationRunner, DisposableBean {
+public class SpringLifecycle implements ApplicationRunner, DisposableBean {
     private final LogHandler logHandler;
     private final CompilerConfigRepository compilerConfigRepository;
     private final SysMessageService sysMessageService;
@@ -36,9 +36,9 @@ public class AppLifecycle implements ApplicationRunner, DisposableBean {
     private final AppProperties appProperties;
     private final ShellExecutor shellExecutor;
 
-    public AppLifecycle(LogHandler logHandler, CompilerConfigRepository compilerConfigRepository,
-                        SysMessageService sysMessageService, MachineService machineService,
-                        BuildDirService buildDirService, AppProperties appProperties, ShellExecutor shellExecutor) {
+    public SpringLifecycle(LogHandler logHandler, CompilerConfigRepository compilerConfigRepository,
+                           SysMessageService sysMessageService, MachineService machineService,
+                           BuildDirService buildDirService, AppProperties appProperties, ShellExecutor shellExecutor) {
         this.logHandler = logHandler;
         this.compilerConfigRepository = compilerConfigRepository;
         this.sysMessageService = sysMessageService;

+ 28 - 17
mgr/src/main/java/cn/reghao/devops/mgr/mgr/aliyun/service/AliyunOss.java

@@ -1,6 +1,7 @@
 package cn.reghao.devops.mgr.mgr.aliyun.service;
 
-import cn.reghao.devops.mgr.config.AppProperties;
+import cn.reghao.devops.mgr.admin.db.repository.OssConfigRepository;
+import cn.reghao.devops.mgr.admin.model.po.OssConfig;
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClientBuilder;
 import com.aliyun.oss.model.*;
@@ -25,15 +26,25 @@ import java.util.List;
 @Slf4j
 @Service
 public class AliyunOss {
-    private final String bucketName;
-    private final OSS ossClient;
-
-    public AliyunOss(AppProperties appProperties) {
-        String endpoint = appProperties.getEndpoint();
-        String accessKeyId = appProperties.getAccessKeyId();
-        String accessKeySecret = appProperties.getAccessKeySecret();
-        this.bucketName = appProperties.getBucketName();
-        this.ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+    private OSS ossClient;
+    private String bucketName;
+    private final OssConfigRepository ossConfigRepository;
+
+    public AliyunOss(OssConfigRepository ossConfigRepository) {
+        this.ossConfigRepository = ossConfigRepository;
+    }
+
+    private OSS getOssClient() {
+        if (ossClient == null) {
+            OssConfig ossConfig = ossConfigRepository.findAll().get(0);
+            String endpoint = ossConfig.getEndpoint();
+            String accessKeyId = ossConfig.getAccessKeyId();
+            String accessKeySecret = ossConfig.getAccessKeySecret();
+            this.bucketName = ossConfig.getBucketName();
+            this.ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+        }
+
+        return ossClient;
     }
 
     public void uploadObject(String bucketName, String objectName, File file) throws IOException {
@@ -41,7 +52,7 @@ public class AliyunOss {
         ObjectMetadata objectMetadata = new ObjectMetadata();
         objectMetadata.setObjectAcl(CannedAccessControlList.PublicRead);
         putObjectRequest.setMetadata(objectMetadata);
-        ossClient.putObject(putObjectRequest);
+        getOssClient().putObject(putObjectRequest);
     }
 
     public void uploadObject(String objectName, File file) throws IOException {
@@ -49,7 +60,7 @@ public class AliyunOss {
         ObjectMetadata objectMetadata = new ObjectMetadata();
         objectMetadata.setObjectAcl(CannedAccessControlList.PublicRead);
         putObjectRequest.setMetadata(objectMetadata);
-        ossClient.putObject(putObjectRequest);
+        getOssClient().putObject(putObjectRequest);
     }
 
     /**
@@ -112,7 +123,7 @@ public class AliyunOss {
     }
 
     public void downloadObject(String objectName) throws IOException {
-        OSSObject object = ossClient.getObject(bucketName, objectName);
+        OSSObject object = getOssClient().getObject(bucketName, objectName);
         log.info("Content-Type: {}", object.getObjectMetadata().getContentType());
         displayTextInputStream(object.getObjectContent());
     }
@@ -127,11 +138,11 @@ public class AliyunOss {
     }
 
     public void deleteObject(String objectName) {
-        ossClient.deleteObject(bucketName, objectName);
+        getOssClient().deleteObject(bucketName, objectName);
     }
 
     public void listObjects(String prefix) {
-        ObjectListing objectListing = ossClient.listObjects(bucketName, prefix);
+        ObjectListing objectListing = getOssClient().listObjects(bucketName, prefix);
         for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
             String objectName = objectSummary.getKey();
             long size = objectSummary.getSize();
@@ -143,14 +154,14 @@ public class AliyunOss {
     }
 
     public void close() {
-        ossClient.shutdown();
+        getOssClient().shutdown();
     }
 
     public String getSignedUrl(String objectName) {
         int expireSecond = 3600;
         long timestamp = System.currentTimeMillis() + expireSecond*1000L;
         Date expiration = new Date(timestamp);
-        URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
+        URL url = getOssClient().generatePresignedUrl(bucketName, objectName, expiration);
         return url.toString();
     }
 }