From eca4f011aa76d96a94918cd0082d089ed5fc7b48 Mon Sep 17 00:00:00 2001 From: besscroft Date: Fri, 21 Apr 2023 16:21:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=BF=87?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E4=BB=A3=E7=A0=81=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=BC=93=E5=AD=98=E3=80=81=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=A3=8E=E6=A0=BC=E8=B0=83=E6=95=B4=E3=80=81=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E4=BC=98=E5=8C=96=EF=BC=8C=E4=BB=A5=E5=8F=8A=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BA=86=E4=B8=80=E4=BA=9B=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/MessageConstants.java | 25 +++++++++ .../diyfile/common/param/LoginParam.java | 4 +- .../common/param/user/UserAddParam.java | 4 +- .../common/param/user/UserUpdateParam.java | 2 +- .../diyfile/common/util/PathUtils.java | 4 +- .../doc/config/OpenApiConfiguration.java | 2 +- .../com/besscroft/diyfile/cache/DiyCache.java | 53 +++++++++++++++++++ .../besscroft/diyfile/config/CacheConfig.java | 23 ++++---- .../diyfile/config/FlywayConfigure.java | 2 +- .../diyfile/config/StpInterfaceImpl.java | 4 +- .../diyfile/controller/FileController.java | 3 +- .../diyfile/controller/StorageController.java | 17 +++--- .../controller/SystemConfigController.java | 9 ++-- .../diyfile/controller/UserController.java | 7 +-- .../diyfile/message/impl/PushServiceImpl.java | 2 - .../diyfile/service/impl/FileServiceImpl.java | 8 ++- .../service/impl/StorageServiceImpl.java | 14 +++-- .../diyfile/service/impl/SyncServiceImpl.java | 4 +- .../service/impl/SystemConfigServiceImpl.java | 8 ++- .../diyfile/service/impl/UserServiceImpl.java | 51 ++++++++---------- .../context/StorageApplicationContext.java | 6 ++- .../service/base/AbstractFileBaseService.java | 15 ++++-- .../service/base/AbstractOSSBaseService.java | 1 + .../base/AbstractOneDriveBaseService.java | 19 +++---- .../service/base/AbstractS3BaseService.java | 5 +- .../service/impl/AliYunOssServiceImpl.java | 17 +++--- .../service/impl/OneDriveServiceImpl.java | 13 +++-- pom.xml | 10 ++-- 28 files changed, 221 insertions(+), 111 deletions(-) create mode 100644 diyfile-common/src/main/java/com/besscroft/diyfile/common/constant/MessageConstants.java create mode 100644 diyfile-system/src/main/java/com/besscroft/diyfile/cache/DiyCache.java diff --git a/diyfile-common/src/main/java/com/besscroft/diyfile/common/constant/MessageConstants.java b/diyfile-common/src/main/java/com/besscroft/diyfile/common/constant/MessageConstants.java new file mode 100644 index 0000000..2f14305 --- /dev/null +++ b/diyfile-common/src/main/java/com/besscroft/diyfile/common/constant/MessageConstants.java @@ -0,0 +1,25 @@ +package com.besscroft.diyfile.common.constant; + +/** + * @Description 返回消息常量 + * @Author Bess Croft + * @Date 2023/4/21 13:36 + */ +public interface MessageConstants { + + /** 通用成功消息 */ + String SUCCESS = "操作成功!"; + + /** 通用失败消息 */ + String ERROR = "操作失败!"; + + /** 通用新增成功消息 */ + String ADD_SUCCESS = "新增成功!"; + + /** 通用更新成功消息 */ + String UPDATE_SUCCESS = "更新成功!"; + + /** 通用删除成功消息 */ + String DELETE_SUCCESS = "删除成功!"; + +} diff --git a/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/LoginParam.java b/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/LoginParam.java index 9199c2b..62700ad 100644 --- a/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/LoginParam.java +++ b/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/LoginParam.java @@ -15,12 +15,12 @@ public class LoginParam { /** 用户名 */ @NotBlank(message = "用户名未填!") - @Schema(title = "用户名", type = "String", required = true) + @Schema(title = "用户名", type = "String", requiredMode = Schema.RequiredMode.REQUIRED) private String username; /** 密码 */ @NotBlank(message = "密码未填!") - @Schema(title = "密码", type = "String", required = true) + @Schema(title = "密码", type = "String", requiredMode = Schema.RequiredMode.REQUIRED) private String password; } diff --git a/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserAddParam.java b/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserAddParam.java index 2590278..3f925e8 100644 --- a/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserAddParam.java +++ b/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserAddParam.java @@ -13,11 +13,11 @@ import lombok.Data; @Schema(title = "新增用户请求参数") public class UserAddParam { - @Schema(title = "用户名", type = "String", required = true) + @Schema(title = "用户名", type = "String", requiredMode = Schema.RequiredMode.REQUIRED) @NotBlank(message = "用户名不能为空!") private String username; - @Schema(title = "密码", type = "String", required = true) + @Schema(title = "密码", type = "String", requiredMode = Schema.RequiredMode.REQUIRED) @NotBlank(message = "密码不能为空!") private String password; diff --git a/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserUpdateParam.java b/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserUpdateParam.java index 875cbe5..aa64d2e 100644 --- a/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserUpdateParam.java +++ b/diyfile-common/src/main/java/com/besscroft/diyfile/common/param/user/UserUpdateParam.java @@ -13,7 +13,7 @@ import lombok.Data; @Schema(title = "更新用户请求参数") public class UserUpdateParam { - @Schema(title = "用户 id", type = "Long", required = true) + @Schema(title = "用户 id", type = "Long", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "用户 id 不能为空!") private Long id; diff --git a/diyfile-common/src/main/java/com/besscroft/diyfile/common/util/PathUtils.java b/diyfile-common/src/main/java/com/besscroft/diyfile/common/util/PathUtils.java index b0c675e..e891505 100644 --- a/diyfile-common/src/main/java/com/besscroft/diyfile/common/util/PathUtils.java +++ b/diyfile-common/src/main/java/com/besscroft/diyfile/common/util/PathUtils.java @@ -52,7 +52,9 @@ public class PathUtils { */ public static boolean isFolder(String path) { // 不包含扩展名的 . 肯定为文件夹 - if (!StrUtil.contains(path, ".") || StrUtil.equals(path, "/")) return true; + if (!StrUtil.contains(path, ".") || StrUtil.equals(path, "/")) { + return true; + } int lastSlashIndex = path.lastIndexOf('/'); String realPath = path.substring(lastSlashIndex + 1); return !realPath.contains("."); diff --git a/diyfile-doc/src/main/java/com/besscroft/diyfile/doc/config/OpenApiConfiguration.java b/diyfile-doc/src/main/java/com/besscroft/diyfile/doc/config/OpenApiConfiguration.java index fc08bd1..494cbee 100644 --- a/diyfile-doc/src/main/java/com/besscroft/diyfile/doc/config/OpenApiConfiguration.java +++ b/diyfile-doc/src/main/java/com/besscroft/diyfile/doc/config/OpenApiConfiguration.java @@ -20,7 +20,7 @@ public class OpenApiConfiguration { return new OpenAPI() .info(new Info().title("DiyFile") .description("一款好看的在线文件列表程序") - .version("v0.4.0") + .version("v0.5.0") .license(new License().name("MIT license").url("https://github.com/besscroft/diyfile/blob/main/LICENSE"))) .externalDocs(new ExternalDocumentation() .description("DiyFile 文档") diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/cache/DiyCache.java b/diyfile-system/src/main/java/com/besscroft/diyfile/cache/DiyCache.java new file mode 100644 index 0000000..9e47da4 --- /dev/null +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/cache/DiyCache.java @@ -0,0 +1,53 @@ +package com.besscroft.diyfile.cache; + +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +import cn.hutool.core.date.DateUnit; + +/** + * @Description + * @Author Bess Croft + * @Date 2023/4/21 15:36 + */ +public class DiyCache { + + private static final Cache DIY_CACHE = CacheUtil.newFIFOCache(100); + + /** + * 新增缓存,默认 15 分钟过期 + * @param key 键 + * @param object 值 + */ + public static void putDiyKey(String key, Object object) { + // 默认 15 分钟 + putDiyKeyTimeOut(key, object, 60 * 15); + } + + /** + * 获取缓存 + * @param key 键 + * @return 值 + */ + public static Object getDiyKey(String key) { + return DIY_CACHE.get(key); + } + + /** + * 新增缓存 + * @param key 键 + * @param object 值 + * @param timeout 过期时间,单位秒 + */ + public static void putDiyKeyTimeOut(String key, Object object, long timeout) { + DIY_CACHE.put(key, object, DateUnit.SECOND.getMillis() * timeout); + } + + /** + * 删除缓存 + * @param key 键 + */ + public static void removeDiyKey(String key) { + DIY_CACHE.remove(key); + } + +} diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/config/CacheConfig.java b/diyfile-system/src/main/java/com/besscroft/diyfile/config/CacheConfig.java index c8efdd4..b542e0d 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/config/CacheConfig.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/config/CacheConfig.java @@ -1,10 +1,9 @@ package com.besscroft.diyfile.config; -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.Caffeine; -import com.github.benmanes.caffeine.cache.CaffeineSpec; -import org.springframework.boot.autoconfigure.cache.CacheProperties; -import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachingConfigurer; +import org.springframework.cache.concurrent.ConcurrentMapCacheManager; +import org.springframework.cache.transaction.TransactionAwareCacheManagerProxy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -14,14 +13,16 @@ import org.springframework.context.annotation.Configuration; * @Date 2023/1/22 20:49 */ @Configuration -public class CacheConfig extends CachingConfigurerSupport { +public class CacheConfig implements CachingConfigurer { + /** + * afterCommit:在事务提交后执行 + * @return CacheManager + */ @Bean - public Cache caffeineCache(CacheProperties cacheProperties) { - String spec = cacheProperties.getCaffeine().getSpec(); - CaffeineSpec caffeineSpec = CaffeineSpec.parse(spec); - Caffeine caffeine = Caffeine.from(caffeineSpec); - return caffeine.build(); + @Override + public CacheManager cacheManager() { + return new TransactionAwareCacheManagerProxy(new ConcurrentMapCacheManager()); } } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/config/FlywayConfigure.java b/diyfile-system/src/main/java/com/besscroft/diyfile/config/FlywayConfigure.java index b5314a4..17568ab 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/config/FlywayConfigure.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/config/FlywayConfigure.java @@ -69,7 +69,7 @@ public class FlywayConfigure { } String databaseProductVersion = databaseMetaData.getDatabaseProductVersion(); log.info("当前数据库版本为:{}", databaseProductVersion); - if (StrUtil.sub(databaseProductVersion, 0, 1).equals("5")) { + if ("5".equals(StrUtil.sub(databaseProductVersion, 0, 1))) { log.info("数据库版本不支持自动初始化,跳过初始化..."); return; } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/config/StpInterfaceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/config/StpInterfaceImpl.java index 21c59c3..c03fa43 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/config/StpInterfaceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/config/StpInterfaceImpl.java @@ -25,7 +25,7 @@ public class StpInterfaceImpl implements StpInterface { * 返回一个账号所拥有的权限码集合 * @param loginId 登录用户 id * @param loginType 登录用户类型 - * @return + * @return 账号所拥有的权限码集合 */ @Override public List getPermissionList(Object loginId, String loginType) { @@ -37,7 +37,7 @@ public class StpInterfaceImpl implements StpInterface { * 返回一个账号所拥有的角色标识集合 * @param loginId 登录用户 id * @param loginType 登录用户类型 - * @return + * @return 账号所拥有的角色标识集合 */ @Override public List getRoleList(Object loginId, String loginType) { diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/FileController.java b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/FileController.java index 07e1753..25b12ac 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/FileController.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/FileController.java @@ -3,6 +3,7 @@ package com.besscroft.diyfile.controller; import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaMode; +import com.besscroft.diyfile.common.constant.MessageConstants; import com.besscroft.diyfile.common.constant.RoleConstants; import com.besscroft.diyfile.common.param.file.DeleteFileParam; import com.besscroft.diyfile.common.param.file.GetFileInfoParam; @@ -105,7 +106,7 @@ public class FileController { // 校验路径 PathUtils.checkPath(param.getPath()); fileService.deleteFile(param.getStorageKey(), param.getPath()); - return AjaxResult.success("删除成功!"); + return AjaxResult.success(MessageConstants.DELETE_SUCCESS); } } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/StorageController.java b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/StorageController.java index 2584557..6f87cd9 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/StorageController.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/StorageController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.util.StrUtil; +import com.besscroft.diyfile.common.constant.MessageConstants; import com.besscroft.diyfile.common.constant.RoleConstants; import com.besscroft.diyfile.common.entity.Storage; import com.besscroft.diyfile.common.exception.DiyFileException; @@ -67,7 +68,7 @@ public class StorageController { @DeleteMapping("/delete/{storageId:[\\d]+}") public AjaxResult delete(@PathVariable(name = "storageId") Long storageId) { storageService.deleteStorage(storageId); - return AjaxResult.success("删除成功!"); + return AjaxResult.success(MessageConstants.DELETE_SUCCESS); } @Operation(summary = "存储新增接口") @@ -81,12 +82,14 @@ public class StorageController { ) @PostMapping("/add") public AjaxResult add(@RequestBody @Valid StorageAddParam param) { - if (Objects.equals("proxy", param.getStorageKey())) + if (Objects.equals("proxy", param.getStorageKey())) { throw new DiyFileException("存储 key 不能为 proxy"); - if (StrUtil.contains(param.getStorageKey(), "/")) + } + if (StrUtil.contains(param.getStorageKey(), "/")) { throw new DiyFileException("存储 key 不能包含 /"); + } storageService.addStorage(param); - return AjaxResult.success("新增成功!"); + return AjaxResult.success(MessageConstants.ADD_SUCCESS); } @Operation(summary = "存储更新接口") @@ -101,7 +104,7 @@ public class StorageController { @PutMapping("/update") public AjaxResult update(@RequestBody @Valid StorageUpdateParam param) { storageService.updateStorage(param); - return AjaxResult.success("更新成功!"); + return AjaxResult.success(MessageConstants.UPDATE_SUCCESS); } @Operation(summary = "存储详情接口") @@ -137,7 +140,7 @@ public class StorageController { @PutMapping("/updateStatus") public AjaxResult updateStatus(@RequestBody @Valid StorageUpdateStatusParam param) { storageService.updateStatus(param.getStorageId(), param.getStatus()); - return AjaxResult.success("更新成功!"); + return AjaxResult.success(MessageConstants.UPDATE_SUCCESS); } @Operation(summary = "默认存储设置") @@ -152,7 +155,7 @@ public class StorageController { @PutMapping("/setDefault/{storageId:[\\d]+}") public AjaxResult setDefault(@PathVariable(name = "storageId") Long storageId) { storageService.setDefault(storageId); - return AjaxResult.success("设置成功!"); + return AjaxResult.success(MessageConstants.UPDATE_SUCCESS); } @SaIgnore diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/SystemConfigController.java b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/SystemConfigController.java index ae6cb32..16a2152 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/SystemConfigController.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/SystemConfigController.java @@ -3,6 +3,7 @@ package com.besscroft.diyfile.controller; import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaMode; +import com.besscroft.diyfile.common.constant.MessageConstants; import com.besscroft.diyfile.common.constant.RoleConstants; import com.besscroft.diyfile.common.param.system.SystemUpdateConfigParam; import com.besscroft.diyfile.common.result.AjaxResult; @@ -46,7 +47,7 @@ public class SystemConfigController { @Operation(summary = "获取网站标题") public AjaxResult getSiteTitle() { String siteTitle = systemConfigService.getSiteTitle(); - return AjaxResult.success("操作成功!", siteTitle); + return AjaxResult.success(MessageConstants.SUCCESS, siteTitle); } @GetMapping("/getSiteConfig") @@ -69,7 +70,7 @@ public class SystemConfigController { @Operation(summary = "获取备案信息") public AjaxResult getBeian() { String beian = systemConfigService.getBeian(); - return AjaxResult.success("操作成功!", beian); + return AjaxResult.success(MessageConstants.SUCCESS, beian); } @PutMapping("/updateConfig") @@ -77,7 +78,7 @@ public class SystemConfigController { @Operation(summary = "更新配置接口") public AjaxResult updateConfig(@RequestBody @Valid SystemUpdateConfigParam param) { systemConfigService.updateConfig(param.getConfigKey(), param.getConfigValue()); - return AjaxResult.success("操作成功!"); + return AjaxResult.success(MessageConstants.SUCCESS); } @GetMapping("/getBarkId") @@ -85,7 +86,7 @@ public class SystemConfigController { @Operation(summary = "获取 Bark 推送 id") public AjaxResult getBarkId() { String barkId = systemConfigService.getBarkId(); - return AjaxResult.success("操作成功!", barkId); + return AjaxResult.success(MessageConstants.SUCCESS, barkId); } } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/UserController.java b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/UserController.java index b5819ea..b3f8c53 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/controller/UserController.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/controller/UserController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.stp.SaTokenInfo; +import com.besscroft.diyfile.common.constant.MessageConstants; import com.besscroft.diyfile.common.constant.RoleConstants; import com.besscroft.diyfile.common.entity.User; import com.besscroft.diyfile.common.param.LoginParam; @@ -75,7 +76,7 @@ public class UserController { @DeleteMapping("/delete/{userId:[\\d]+}") public AjaxResult delete(@PathVariable(name = "userId") Long userId) { userService.deleteUser(userId); - return AjaxResult.success("删除成功!"); + return AjaxResult.success(MessageConstants.DELETE_SUCCESS); } @Operation(summary = "用户信息获取接口") @@ -122,14 +123,14 @@ public class UserController { @PutMapping("/updateStatus") public AjaxResult updateStatus(@RequestBody @Valid UserUpdateStatusParam param) { userService.updateStatus(param.getUserId(), param.getStatus()); - return AjaxResult.success("更新成功!"); + return AjaxResult.success(MessageConstants.UPDATE_SUCCESS); } @Operation(summary = "用户密码更新接口") @PutMapping("/updatePassword") public AjaxResult updatePassword(@RequestBody @Valid UserUpdatePwdParam param) { userService.updatePassword(param.getUserId(), param.getIsSelf(), param.getOldPassword(), param.getNewPassword()); - return AjaxResult.success("更新成功!"); + return AjaxResult.success(MessageConstants.UPDATE_SUCCESS); } } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/message/impl/PushServiceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/message/impl/PushServiceImpl.java index 7ac8f6a..525989e 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/message/impl/PushServiceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/message/impl/PushServiceImpl.java @@ -4,8 +4,6 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.besscroft.diyfile.message.PushService; import com.ejlchina.okhttps.OkHttps; -import com.github.benmanes.caffeine.cache.Cache; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/FileServiceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/FileServiceImpl.java index 8be8cb5..ba2a1d9 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/FileServiceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/FileServiceImpl.java @@ -40,14 +40,18 @@ public class FileServiceImpl implements FileService { @Cacheable(value = CacheConstants.DEFAULT_STORAGE, unless = "#result == null") public StorageInfoVo defaultStorage() { Storage storage = storageMapper.selectByDefault(); - if (Objects.isNull(storage)) return new StorageInfoVo(); + if (Objects.isNull(storage)) { + return new StorageInfoVo(); + } return StorageConverterMapper.INSTANCE.StorageToInfoVo(storage); } @Override public List defaultItem() { Long storageId = storageService.getDefaultStorageId(); - if (Objects.isNull(storageId)) return CollUtil.newArrayList(); + if (Objects.isNull(storageId)) { + return CollUtil.newArrayList(); + } AbstractFileBaseService service = storageApplicationContext.getServiceByStorageId(storageId); return service.getFileList(null); } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/StorageServiceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/StorageServiceImpl.java index c975adc..a93b7a3 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/StorageServiceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/StorageServiceImpl.java @@ -88,8 +88,9 @@ public class StorageServiceImpl extends ServiceImpl impl public void updateStorage(StorageUpdateParam param) { Storage storage = StorageConverterMapper.INSTANCE.UpdateParamToStorage(param); Storage oldStorage = this.baseMapper.selectById(storage.getId()); - if (!Objects.equals(storage.getType(), oldStorage.getType())) + if (!Objects.equals(storage.getType(), oldStorage.getType())) { throw new DiyFileException("存储类型不允许修改!"); + } storage.setStorageKey(oldStorage.getStorageKey()); this.baseMapper.updateById(storage); // 如果是 OneDrive 存储,需要判断是否包含 ***,如果包含则不更新 @@ -135,8 +136,9 @@ public class StorageServiceImpl extends ServiceImpl impl StorageInfoVo vo = StorageConverterMapper.INSTANCE.StorageToInfoVo(storage); List configs = CollUtil.newArrayList(); for (StorageConfig config: configList) { - if (Objects.equals(config.getStorageId(), storage.getId())) + if (Objects.equals(config.getStorageId(), storage.getId())) { configs.add(config); + } } vo.setConfigList(configs); voList.add(vo); @@ -213,7 +215,9 @@ public class StorageServiceImpl extends ServiceImpl impl @Cacheable(value = CacheConstants.DEFAULT_STORAGE, unless = "#result == null") public Long getDefaultStorageId() { Storage storage = this.baseMapper.selectByDefault(); - if (Objects.isNull(storage)) return null; + if (Objects.isNull(storage)) { + return null; + } StorageInfoVo vo = StorageConverterMapper.INSTANCE.StorageToInfoVo(storage); return vo.getId(); } @@ -230,7 +234,9 @@ public class StorageServiceImpl extends ServiceImpl impl public void saveStorageInfoVoList(List storageInfoVoList) { for (StorageInfoVo storageInfoVo : storageInfoVoList) { Storage storage = StorageConverterMapper.INSTANCE.StorageInfoVoToStorage(storageInfoVo); - if (Objects.isNull(storage)) throw new DiyFileException("存储信息导入失败!"); + if (Objects.isNull(storage)) { + throw new DiyFileException("存储信息导入失败!"); + } storage.setId(null); this.save(storage); List configList = storageInfoVo.getConfigList(); diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SyncServiceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SyncServiceImpl.java index bc854ba..86930cc 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SyncServiceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SyncServiceImpl.java @@ -28,7 +28,9 @@ public class SyncServiceImpl implements SyncService { @Override public void taskAdd(String beforeStorageKey, String beforePath, String afterStorageKey, String afterPath) { // 判断被同步路径是否为文件夹路径 - if (!PathUtils.isFolder(afterPath)) throw new DiyFileException("被同步路径必须为文件夹路径!"); + if (!PathUtils.isFolder(afterPath)) { + throw new DiyFileException("被同步路径必须为文件夹路径!"); + } Long beforeStorageId = storageService.getStorageIdByStorageKey(afterStorageKey); Long afterStorageId = storageService.getStorageIdByStorageKey(afterStorageKey); log.info("同步任务参数:{} {} {} {}", beforeStorageKey, beforePath, afterStorageKey, afterPath); diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SystemConfigServiceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SystemConfigServiceImpl.java index 3c6a168..1fcafa2 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SystemConfigServiceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/service/impl/SystemConfigServiceImpl.java @@ -7,6 +7,7 @@ import com.besscroft.diyfile.common.constant.SystemConstants; import com.besscroft.diyfile.common.entity.Storage; import com.besscroft.diyfile.common.entity.SystemConfig; import com.besscroft.diyfile.common.entity.User; +import com.besscroft.diyfile.common.exception.DiyFileException; import com.besscroft.diyfile.common.vo.StorageInfoVo; import com.besscroft.diyfile.mapper.SystemConfigMapper; import com.besscroft.diyfile.mapper.UserMapper; @@ -58,7 +59,9 @@ public class SystemConfigServiceImpl extends ServiceImpl getSiteConfig() { List configList = this.baseMapper.queryAllByType(1); - if (CollectionUtils.isEmpty(configList)) return new HashMap<>(); + if (CollectionUtils.isEmpty(configList)) { + return new HashMap<>(); + } return configList.stream().collect(Collectors.toMap(SystemConfig::getConfigKey, SystemConfig::getConfigValue)); } @@ -129,7 +132,8 @@ public class SystemConfigServiceImpl extends ServiceImpl implements Us private final PushService pushService; private final SystemConfigService systemConfigService; - private final Cache caffeineCache; @Override public SaTokenInfo login(String username, String password) { @@ -52,10 +51,12 @@ public class UserServiceImpl extends ServiceImpl implements Us log.info("用户发起登录请求:{},请求 uri 为:{}", username, request.toUriString()); User user = this.baseMapper.selectByUsername(username); Assert.notNull(user, "账号或密码错误!"); - if (Objects.equals(user.getStatus(), SystemConstants.STATUS_NO)) + if (Objects.equals(user.getStatus(), SystemConstants.STATUS_NO)) { throw new DiyFileException(String.format("账号:%s 已被禁用,请联系管理员!", username)); - if (!Objects.equals(SecureUtil.sha256(password), user.getPassword())) + } + if (!Objects.equals(SecureUtil.sha256(password), user.getPassword())) { throw new DiyFileException("账号或密码错误!"); + } // 登录 StpUtil.login(user.getId()); // 设置最后登录时间 @@ -72,7 +73,7 @@ public class UserServiceImpl extends ServiceImpl implements Us @Override public Map info() { long userId = StpUtil.getLoginIdAsLong(); - User user = getCacheUserById(userId); + User user = getUserById(userId); Assert.notNull(user, "暂未登录!"); Map map = new HashMap<>(); map.put("userName", user.getName()); @@ -94,10 +95,11 @@ public class UserServiceImpl extends ServiceImpl implements Us CacheConstants.STATISTICS }, allEntries = true) public void deleteUser(Long userId) { - User user = getCacheUserById(userId); + User user = getUserById(userId); Assert.notNull(user, "用户不存在!"); - if (Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN)) + if (Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN)) { throw new DiyFileException("超级管理员不允许被删除!"); + } Assert.isTrue(this.baseMapper.deleteById(userId) > 0, "用户删除失败!"); } @@ -107,16 +109,19 @@ public class UserServiceImpl extends ServiceImpl implements Us } @Override - public User getUserById(Long id) { - return getCacheUserById(id); + @Cacheable(value = CacheConstants.USER, key = "#userId", unless = "#result == null") + public User getUserById(Long userId) { + log.info("查询用户信息:{}", userId); + return this.baseMapper.selectById(userId); } @Override @Transactional(rollbackFor = Exception.class) public void addUser(UserAddParam param) { User user = UserConverterMapper.INSTANCE.AddParamToUser(param); - if (Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN)) + if (Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN)) { throw new DiyFileException("违反规则!超级管理员角色不允许被添加!"); + } user.setStatus(SystemConstants.STATUS_NO); user.setPassword(SecureUtil.sha256(param.getPassword().trim())); Assert.isTrue(this.baseMapper.insert(user) > 0, "新增用户失败!"); @@ -133,12 +138,14 @@ public class UserServiceImpl extends ServiceImpl implements Us User oldUser = this.baseMapper.selectById(user.getId()); // 如果原来不是超级管理员,现在是超级管理员,或者原来是超级管理员,现在不是超级管理员,抛出异常 if ((!Objects.equals(oldUser.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN) && Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN)) - || (Objects.equals(oldUser.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN) && !Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN))) + || (Objects.equals(oldUser.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN) && !Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN))) { throw new DiyFileException("违反规则!更新用户失败!"); + } // 非管理员只能修改自己的信息 if (!(Objects.equals(oldUser.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN) || Objects.equals(oldUser.getRole(), RoleConstants.PLATFORM_ADMIN)) - && !Objects.equals(oldUser.getId(), user.getId())) + && !Objects.equals(oldUser.getId(), user.getId())) { throw new DiyFileException("违反规则!更新用户失败!"); + } Assert.isTrue(this.baseMapper.updateById(user) > 0, "更新用户失败!"); } @@ -150,8 +157,9 @@ public class UserServiceImpl extends ServiceImpl implements Us public void updateStatus(Long id, Integer status) { User user = this.baseMapper.selectById(id); Assert.notNull(user, "用户不存在!"); - if (Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN)) + if (Objects.equals(user.getRole(), RoleConstants.PLATFORM_SUPER_ADMIN)) { throw new DiyFileException("超级管理员不允许被禁用!"); + } user.setStatus(status); Assert.isTrue(this.baseMapper.updateById(user) > 0, "更新用户状态失败!"); } @@ -168,24 +176,11 @@ public class UserServiceImpl extends ServiceImpl implements Us userId = StpUtil.getLoginIdAsLong(); } String password = this.baseMapper.selectPasswordById(userId); - if (!Objects.equals(SecureUtil.sha256(oldPassword), password)) + if (!Objects.equals(SecureUtil.sha256(oldPassword), password)) { throw new DiyFileException("旧密码错误!"); + } String sha256Pwd = SecureUtil.sha256(newPassword); this.baseMapper.updatePasswordById(userId, sha256Pwd); } - /** - * 从缓存中获取用户信息 - * @param userId 用户 id - * @return 用户信息 - */ - private User getCacheUserById(Long userId) { - return (User) Optional.ofNullable(caffeineCache.getIfPresent(CacheConstants.USER + userId)) - .orElseGet(() -> { - User user = this.baseMapper.selectById(userId); - caffeineCache.put(CacheConstants.USER + userId, user); - return user; - }); - } - } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/context/StorageApplicationContext.java b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/context/StorageApplicationContext.java index 2f7dc08..afa6415 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/context/StorageApplicationContext.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/context/StorageApplicationContext.java @@ -78,10 +78,12 @@ public class StorageApplicationContext implements ApplicationContextAware { * @param storage 存储对象 */ public void init(Storage storage) { - if (Objects.equals("proxy", storage.getStorageKey())) + if (Objects.equals("proxy", storage.getStorageKey())) { throw new DiyFileException("存储 key 不能为 proxy"); - if (StrUtil.contains(storage.getStorageKey(), "/")) + } + if (StrUtil.contains(storage.getStorageKey(), "/")) { throw new DiyFileException("存储 key 不能包含 /"); + } Long storageId = storage.getId(); String storageName = storage.getName(); diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractFileBaseService.java b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractFileBaseService.java index 5185cf6..cfa2e16 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractFileBaseService.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractFileBaseService.java @@ -32,6 +32,7 @@ public abstract class AbstractFileBaseService implement /** 基础服务初始化方法 */ public abstract void init(); + @Override public abstract String getFileDownloadUrl(String fileName, String filePath); @Override @@ -41,7 +42,7 @@ public abstract class AbstractFileBaseService implement * 获取文件信息 * @param filePath 文件路径 * @param fileName 文件名 - * @return + * @return 文件信息 */ public abstract FileInfoVo getFileInfo(String filePath, String fileName); @@ -87,26 +88,30 @@ public abstract class AbstractFileBaseService implement public abstract void moveItem(String startPath, String endPath); public void setStorageId(Long storageId) { - if (Objects.nonNull(this.storageId)) + if (Objects.nonNull(this.storageId)) { throw new IllegalStateException("当前存储服务不允许重复初始化!"); + } this.storageId = storageId; } public void setStorageKey(String storageKey) { - if (Objects.nonNull(this.storageKey)) + if (Objects.nonNull(this.storageKey)) { throw new IllegalStateException("当前存储服务不允许重复初始化!"); + } this.storageKey = storageKey; } public void setName(String name) { - if (StrUtil.isNotBlank(this.name)) + if (StrUtil.isNotBlank(this.name)) { throw new IllegalStateException("当前存储服务不允许重复初始化!"); + } this.name = name; } public void setInitParam(T initParam) { - if (Objects.nonNull(this.initParam)) + if (Objects.nonNull(this.initParam)) { throw new IllegalStateException("当前存储服务不允许重复初始化!"); + } this.initParam = initParam; } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOSSBaseService.java b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOSSBaseService.java index f562c95..4bf67fc 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOSSBaseService.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOSSBaseService.java @@ -22,6 +22,7 @@ public abstract class AbstractOSSBaseService extends Abstrac * @param startPath 开始路径 * @param endPath 结束路径 */ + @Override public abstract void moveItem(String startPath, String endPath); } diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOneDriveBaseService.java b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOneDriveBaseService.java index ebef9fd..251263c 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOneDriveBaseService.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractOneDriveBaseService.java @@ -2,6 +2,7 @@ package com.besscroft.diyfile.storage.service.base; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.besscroft.diyfile.cache.DiyCache; import com.besscroft.diyfile.common.constant.CacheConstants; import com.besscroft.diyfile.common.constant.storage.OneDriveConstants; import com.besscroft.diyfile.common.enums.StorageTypeEnum; @@ -11,7 +12,6 @@ import com.ejlchina.okhttps.HttpResult; import com.ejlchina.okhttps.OkHttps; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.benmanes.caffeine.cache.Cache; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -27,14 +27,8 @@ import java.util.Optional; @Slf4j public abstract class AbstractOneDriveBaseService extends AbstractFileBaseService { - private Cache caffeineCache; private ObjectMapper objectMapper; - @Autowired - public void setCaffeineCache(Cache caffeineCache) { - this.caffeineCache = caffeineCache; - } - @Autowired public void setObjectMapper(ObjectMapper objectMapper) { this.objectMapper = objectMapper; @@ -56,6 +50,7 @@ public abstract class AbstractOneDriveBaseService exten * @param folderPath 文件路径 * @return 会话 */ + @Override public abstract String getUploadSession(String folderPath); /** @@ -63,6 +58,7 @@ public abstract class AbstractOneDriveBaseService exten * @param startPath 开始路径 * @param endPath 结束路径 */ + @Override public abstract void moveItem(String startPath, String endPath); /** @@ -85,7 +81,7 @@ public abstract class AbstractOneDriveBaseService exten * @return OneDrive 驱动 id */ protected String getDriveId() { - return Optional.ofNullable(caffeineCache.getIfPresent(CacheConstants.ONEDRIVE_DRIVE_ID + storageId)) + return Optional.ofNullable(DiyCache.getDiyKey(CacheConstants.ONEDRIVE_DRIVE_ID + storageId)) .orElseGet(this::getDriveIdRest).toString(); } @@ -101,7 +97,7 @@ public abstract class AbstractOneDriveBaseService exten try { Map map = objectMapper.readValue(result.getStr("parentReference"), Map.class); String driveId = map.get("driveId").toString(); - caffeineCache.put(CacheConstants.ONEDRIVE_DRIVE_ID + storageId, driveId); + DiyCache.putDiyKey(CacheConstants.ONEDRIVE_DRIVE_ID + storageId, driveId); return driveId; } catch (JsonProcessingException e) { log.error("获取 OneDrive 驱动 id 失败!"); @@ -114,9 +110,8 @@ public abstract class AbstractOneDriveBaseService exten * @return 新的 token */ protected String getAccessToken() { - Long storageId = getStorageId(); // 先从缓存中获取 token,如果没有则从调用 REST API 获取 - return Optional.ofNullable(caffeineCache.getIfPresent(CacheConstants.ONEDRIVE_TOKEN + storageId)) + return Optional.ofNullable(DiyCache.getDiyKey(CacheConstants.ONEDRIVE_TOKEN + storageId)) .orElseGet(this::refreshAccessToken).toString(); } @@ -138,7 +133,7 @@ public abstract class AbstractOneDriveBaseService exten .post(); Map tokenResult = objectMapper.readValue(result.getBody().toString(), Map.class); String accessToken = tokenResult.get("access_token").toString(); - caffeineCache.put(CacheConstants.ONEDRIVE_TOKEN + getStorageId(), accessToken); + DiyCache.putDiyKey(CacheConstants.ONEDRIVE_TOKEN + getStorageId(), accessToken); log.info("accessToken 刷新成功:{}", accessToken); return accessToken; } catch (Exception e) { diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractS3BaseService.java b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractS3BaseService.java index 93ca5cf..e5226b3 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractS3BaseService.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/base/AbstractS3BaseService.java @@ -28,6 +28,7 @@ public abstract class AbstractS3BaseService extends AbstractF /** S3 客户端 */ protected S3Client s3Client; + @Override public abstract void init(); @Override @@ -69,8 +70,9 @@ public abstract class AbstractS3BaseService extends AbstractF FileInfoVo fileInfoVo = new FileInfoVo(); if (object.key().contains("/")) { int lastSlashIndex = object.key().lastIndexOf('/'); - if (Objects.equals("", object.key().substring(lastSlashIndex + 1))) + if (Objects.equals("", object.key().substring(lastSlashIndex + 1))) { continue; + } fileInfoVo.setName(object.key().substring(lastSlashIndex + 1)); fileInfoVo.setPath(object.key().substring(0, lastSlashIndex)); } else { @@ -94,6 +96,7 @@ public abstract class AbstractS3BaseService extends AbstractF return fileInfoVoList; } + @Override public abstract Integer getStorageType(); @Override diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/AliYunOssServiceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/AliYunOssServiceImpl.java index e449cfb..4217bac 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/AliYunOssServiceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/AliYunOssServiceImpl.java @@ -107,7 +107,7 @@ public class AliYunOssServiceImpl extends AbstractOSSBaseService @Override public void deleteItem(String filePath) { // 删除文件或目录。如果要删除目录,目录必须为空。 - if (StrUtil.sub(filePath, 0, 2).equals("//")) { + if ("//".equals(StrUtil.sub(filePath, 0, 2))) { ossClient.deleteObject(initParam.getBucketName(), StrUtil.sub(filePath, 2, filePath.length())); } else { ossClient.deleteObject(initParam.getBucketName(), StrUtil.sub(filePath, 1, filePath.length())); @@ -136,8 +136,9 @@ public class AliYunOssServiceImpl extends AbstractOSSBaseService for(OSSObjectSummary summary : summaryList) { FileInfoVo fileInfoVo = new FileInfoVo(); int lastSlashIndex = summary.getKey().lastIndexOf('/'); - if (Objects.equals("", summary.getKey().substring(lastSlashIndex + 1))) + if (Objects.equals("", summary.getKey().substring(lastSlashIndex + 1))) { continue; + } if (summary.getKey().contains("/")) { fileInfoVo.setName(summary.getKey().substring(lastSlashIndex + 1)); } else { @@ -195,19 +196,19 @@ public class AliYunOssServiceImpl extends AbstractOSSBaseService // TODO 获取代理地址 try { URL url = new URL(initParam.getEndpoint()); - StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append(url.getProtocol()) + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(url.getProtocol()) .append("://") .append(bucketName) .append(".") .append(url.getHost()); - if (StrUtil.sub(objectName, 0, 1).equals("/")) { - stringBuffer.append(objectName); + if ("/".equals(StrUtil.sub(objectName, 0, 1))) { + stringBuilder.append(objectName); } else { - stringBuffer.append("/") + stringBuilder.append("/") .append(objectName); } - return stringBuffer.toString(); + return stringBuilder.toString(); } catch (MalformedURLException e) { log.error("地址获取失败:{}", e.getMessage()); throw new DiyFileException("地址获取失败!"); diff --git a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/OneDriveServiceImpl.java b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/OneDriveServiceImpl.java index 4a281ec..67799af 100644 --- a/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/OneDriveServiceImpl.java +++ b/diyfile-system/src/main/java/com/besscroft/diyfile/storage/service/impl/OneDriveServiceImpl.java @@ -5,6 +5,8 @@ import cn.hutool.core.util.URLUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.besscroft.diyfile.cache.DiyCache; +import com.besscroft.diyfile.common.constant.CacheConstants; import com.besscroft.diyfile.common.constant.FileConstants; import com.besscroft.diyfile.common.constant.storage.OneDriveConstants; import com.besscroft.diyfile.common.exception.DiyFileException; @@ -80,6 +82,7 @@ public class OneDriveServiceImpl extends AbstractOneDriveBaseService 0) { log.info("获取 OneDrive 文件信息失败,正在进行第 {} 次重试", retryCount); + DiyCache.removeDiyKey(CacheConstants.ONEDRIVE_TOKEN + storageId); refreshAccessToken(); } try { @@ -108,8 +111,9 @@ public class OneDriveServiceImpl extends AbstractOneDriveBaseServicepom - 0.4.0 + 0.5.0 17 17 ${java.version} @@ -25,16 +25,16 @@ UTF-8 UTF-8 3.0.5 - 1.5.3.Final + 1.5.4.Final 0.2.0 3.5.3.1 - 2.0.4 + 2.1.0 1.34.0 - 5.8.15 + 5.8.18 1.4.6 6.4.1 3.5.3 - 3.1.5 + 3.1.6 3.16.0 2.3.1 1.1.1