mirror of
https://github.com/zfile-dev/zfile.git
synced 2025-04-19 05:34:52 +00:00
🔒 新增自动检测驱动器已存储参数和驱动器支持所有参数比对功能, 防止驱动器新增参数后, 系统已存在的驱动器因 NPE 问题无法正常加载的问题.
This commit is contained in:
@@ -43,4 +43,6 @@ public class StorageConfigConstant {
|
||||
|
||||
public static final String PROXY_DOMAIN = "proxyDomain";
|
||||
|
||||
public static final String REGION_KEY = "region";
|
||||
|
||||
}
|
||||
@@ -10,6 +10,9 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author zhaojun
|
||||
@@ -121,6 +124,30 @@ public abstract class AbstractBaseFileService implements BaseFileService {
|
||||
public abstract List<StorageConfig> storageStrategyConfigList();
|
||||
|
||||
|
||||
/**
|
||||
* 合并数据库查询到的驱动器参数和驱动器本身支持的参数列表, 防止获取新增参数字段时出现空指针异常
|
||||
*
|
||||
* @param dbStorageConfigList
|
||||
* 数据库查询到的存储列表
|
||||
*/
|
||||
public void mergeStrategyConfig(Map<String, StorageConfig> dbStorageConfigList) {
|
||||
// 获取驱动器支持的参数列表
|
||||
List<StorageConfig> storageConfigs = this.storageStrategyConfigList();
|
||||
|
||||
// 比对数据库已存储的参数列表和驱动器支持的参数列表, 找出新增的支持项
|
||||
Set<String> dbConfigKeySet = dbStorageConfigList.keySet();
|
||||
Set<String> allKeySet = storageConfigs.stream().map(StorageConfig::getKey).collect(Collectors.toSet());
|
||||
|
||||
allKeySet.removeAll(dbConfigKeySet);
|
||||
|
||||
// 对于新增的参数, put 到数据库查询的 Map 中, 防止程序获取时出现 NPE.
|
||||
for (String key : allKeySet) {
|
||||
StorageConfig storageConfig = new StorageConfig();
|
||||
storageConfig.setValue("");
|
||||
dbStorageConfigList.put(key, storageConfig);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索文件
|
||||
*
|
||||
|
||||
@@ -35,6 +35,7 @@ public class AliyunServiceImpl extends AbstractS3BaseFileService implements Base
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue();
|
||||
String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue();
|
||||
String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue();
|
||||
|
||||
@@ -54,6 +54,7 @@ public class FtpServiceImpl extends AbstractBaseFileService implements BaseFileS
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
host = stringStorageConfigMap.get(StorageConfigConstant.HOST_KEY).getValue();
|
||||
port = stringStorageConfigMap.get(StorageConfigConstant.PORT_KEY).getValue();
|
||||
username = stringStorageConfigMap.get(StorageConfigConstant.USERNAME_KEY).getValue();
|
||||
|
||||
@@ -35,6 +35,7 @@ public class HuaweiServiceImpl extends AbstractS3BaseFileService implements Base
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue();
|
||||
String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue();
|
||||
String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue();
|
||||
|
||||
@@ -52,6 +52,7 @@ public class LocalServiceImpl extends AbstractBaseFileService implements BaseFil
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
filePath = stringStorageConfigMap.get(StorageConfigConstant.FILE_PATH_KEY).getValue();
|
||||
if (Objects.isNull(filePath)) {
|
||||
log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription());
|
||||
|
||||
@@ -35,6 +35,7 @@ public class MinIOServiceImpl extends AbstractS3BaseFileService implements BaseF
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue();
|
||||
String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue();
|
||||
String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue();
|
||||
|
||||
@@ -44,6 +44,7 @@ public class OneDriveChinaServiceImpl extends AbstractOneDriveServiceBase implem
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue();
|
||||
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
|
||||
super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue();
|
||||
|
||||
@@ -44,6 +44,7 @@ public class OneDriveServiceImpl extends AbstractOneDriveServiceBase implements
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue();
|
||||
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
|
||||
super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue();
|
||||
|
||||
@@ -35,6 +35,7 @@ public class QiniuServiceImpl extends AbstractS3BaseFileService implements BaseF
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue();
|
||||
String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue();
|
||||
String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package im.zhaojun.zfile.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.amazonaws.auth.AWSStaticCredentialsProvider;
|
||||
import com.amazonaws.auth.BasicAWSCredentials;
|
||||
import com.amazonaws.client.builder.AwsClientBuilder;
|
||||
@@ -10,7 +11,6 @@ import im.zhaojun.zfile.model.entity.StorageConfig;
|
||||
import im.zhaojun.zfile.model.enums.StorageTypeEnum;
|
||||
import im.zhaojun.zfile.service.base.AbstractS3BaseFileService;
|
||||
import im.zhaojun.zfile.service.base.BaseFileService;
|
||||
import im.zhaojun.zfile.util.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
@@ -36,6 +36,7 @@ public class S3ServiceImpl extends AbstractS3BaseFileService implements BaseFile
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue();
|
||||
String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue();
|
||||
String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue();
|
||||
|
||||
@@ -44,6 +44,7 @@ public class SharePointChinaServiceImpl extends AbstractSharePointServiceBase im
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue();
|
||||
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
|
||||
super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue();
|
||||
|
||||
@@ -44,6 +44,7 @@ public class SharePointServiceImpl extends AbstractSharePointServiceBase impleme
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue();
|
||||
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
|
||||
super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue();
|
||||
|
||||
@@ -35,6 +35,7 @@ public class TencentServiceImpl extends AbstractS3BaseFileService implements Bas
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String secretId = stringStorageConfigMap.get(StorageConfigConstant.SECRET_ID_KEY).getValue();
|
||||
String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue();
|
||||
String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue();
|
||||
|
||||
@@ -53,6 +53,7 @@ public class UpYunServiceImpl extends AbstractBaseFileService implements BaseFil
|
||||
this.driveId = driveId;
|
||||
Map<String, StorageConfig> stringStorageConfigMap =
|
||||
storageConfigService.selectStorageConfigMapByDriveId(driveId);
|
||||
this.mergeStrategyConfig(stringStorageConfigMap);
|
||||
String bucketName = stringStorageConfigMap.get(StorageConfigConstant.BUCKET_NAME_KEY).getValue();
|
||||
String username = stringStorageConfigMap.get(StorageConfigConstant.USERNAME_KEY).getValue();
|
||||
String password = stringStorageConfigMap.get(StorageConfigConstant.PASSWORD_KEY).getValue();
|
||||
|
||||
Reference in New Issue
Block a user