diff --git a/src/main/java/im/zhaojun/common/model/constant/StorageConfigConstant.java b/src/main/java/im/zhaojun/common/model/constant/StorageConfigConstant.java index 6d8cca0..485fa64 100644 --- a/src/main/java/im/zhaojun/common/model/constant/StorageConfigConstant.java +++ b/src/main/java/im/zhaojun/common/model/constant/StorageConfigConstant.java @@ -33,4 +33,8 @@ public class StorageConfigConstant { public static final String REFRESH_TOKEN_KEY = "refreshToken"; + public static final String PATH_STYLE = "pathStyle"; + + public static final String IS_PRIVATE = "isPrivate"; + } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/common/model/enums/StorageTypeEnum.java b/src/main/java/im/zhaojun/common/model/enums/StorageTypeEnum.java index 5eebeaf..83f6082 100644 --- a/src/main/java/im/zhaojun/common/model/enums/StorageTypeEnum.java +++ b/src/main/java/im/zhaojun/common/model/enums/StorageTypeEnum.java @@ -19,6 +19,7 @@ public enum StorageTypeEnum { HUAWEI("huawei", "华为云 OBS"), LOCAL("local", "本地存储"), MINIO("minio", "MINIO"), + S3("s3", "S3通用协议"), ONE_DRIVE("onedrive", "OneDrive"), ONE_DRIVE_CHINA("onedrive-china", "OneDrive 世纪互联"), QINIU("qiniu", "七牛云 KODO"), diff --git a/src/main/java/im/zhaojun/common/security/MySecurityConfig.java b/src/main/java/im/zhaojun/common/security/MySecurityConfig.java index 25915cc..59358af 100644 --- a/src/main/java/im/zhaojun/common/security/MySecurityConfig.java +++ b/src/main/java/im/zhaojun/common/security/MySecurityConfig.java @@ -98,6 +98,7 @@ public class MySecurityConfig extends WebSecurityConfigurerAdapter { http.cors(); http.csrf().disable(); + http.headers().frameOptions().sameOrigin(); } @Bean diff --git a/src/main/java/im/zhaojun/s3/S3ServiceImpl.java b/src/main/java/im/zhaojun/s3/S3ServiceImpl.java new file mode 100644 index 0000000..a98a76b --- /dev/null +++ b/src/main/java/im/zhaojun/s3/S3ServiceImpl.java @@ -0,0 +1,68 @@ +package im.zhaojun.s3; + +import cn.hutool.core.convert.Convert; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import im.zhaojun.common.model.StorageConfig; +import im.zhaojun.common.model.constant.StorageConfigConstant; +import im.zhaojun.common.model.enums.StorageTypeEnum; +import im.zhaojun.common.service.AbstractS3FileService; +import im.zhaojun.common.service.FileService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Objects; + +/** + * @author zhaojun + */ +@Service +public class S3ServiceImpl extends AbstractS3FileService implements FileService { + + private static final Logger log = LoggerFactory.getLogger(S3ServiceImpl.class); + + @Override + public void init() { + try { + Map stringStorageConfigMap = + storageConfigService.selectStorageConfigMapByKey(getStorageTypeEnum()); + String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue(); + String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue(); + String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue(); + + super.domain = stringStorageConfigMap.get(StorageConfigConstant.DOMAIN_KEY).getValue(); + super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue(); + super.bucketName = stringStorageConfigMap.get(StorageConfigConstant.BUCKET_NAME_KEY).getValue(); + super.isPrivate = Convert.toBool(stringStorageConfigMap.get(StorageConfigConstant.IS_PRIVATE).getValue(), true); + + String pathStyle = stringStorageConfigMap.get(StorageConfigConstant.PATH_STYLE).getValue(); + + boolean isPathStyle = "path-style".equals(pathStyle); + + if (Objects.isNull(accessKey) || Objects.isNull(secretKey) || Objects.isNull(endPoint) || Objects.isNull(bucketName)) { + log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription()); + isInitialized = false; + } else { + BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); + s3Client = AmazonS3ClientBuilder.standard() + .withPathStyleAccessEnabled(isPathStyle) + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, "")).build(); + + isInitialized = testConnection(); + } + } catch (Exception e) { + log.debug(getStorageTypeEnum().getDescription() + " 初始化异常, 已跳过"); + } + } + + @Override + public StorageTypeEnum getStorageTypeEnum() { + return StorageTypeEnum.S3; + } + +}