🔒 新增自动检测驱动器已存储参数和驱动器支持所有参数比对功能, 防止驱动器新增参数后, 系统已存在的驱动器因 NPE 问题无法正常加载的问题.

This commit is contained in:
赵俊
2021-09-19 11:27:57 +08:00
parent fb08ef6e78
commit e4f663c9f0
15 changed files with 43 additions and 1 deletions

View File

@@ -43,4 +43,6 @@ public class StorageConfigConstant {
public static final String PROXY_DOMAIN = "proxyDomain";
public static final String REGION_KEY = "region";
}

View File

@@ -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);
}
}
/**
* 搜索文件
*

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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());

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();