diff --git a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileOperatorApi.java b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileOperatorApi.java index 06b1c72fb..9f0d5c989 100644 --- a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileOperatorApi.java +++ b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileOperatorApi.java @@ -167,6 +167,17 @@ public interface FileOperatorApi { */ String getFileAuthUrl(String bucketName, String key, Long timeoutMillis); + /** + * 获取文件的下载地址(不带鉴权的),生成外网地址 + * + * @param bucketName 文件桶 + * @param key 文件唯一标识 + * @return 外部系统可以直接访问的url + * @author fengshuonan + * @date 2021/6/10 12:03 + */ + String getFileUnAuthUrl(String bucketName, String key); + /** * 删除文件 * diff --git a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/exception/enums/FileExceptionEnum.java b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/exception/enums/FileExceptionEnum.java index 67b58a613..5b9c938cf 100644 --- a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/exception/enums/FileExceptionEnum.java +++ b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/exception/enums/FileExceptionEnum.java @@ -116,7 +116,12 @@ public enum FileExceptionEnum implements AbstractExceptionEnum { /** * 文件不允许被访问 */ - FILE_DENIED_ACCESS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + FileConstants.FILE_EXCEPTION_STEP_CODE + "16", "文件不允许被访问,文件加密等级不符合"); + FILE_DENIED_ACCESS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + FileConstants.FILE_EXCEPTION_STEP_CODE + "16", "文件不允许被访问,文件加密等级不符合"), + + /** + * 文件不允许被访问 + */ + FILE_PERMISSION_DENIED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + FileConstants.FILE_EXCEPTION_STEP_CODE + "17", "文件不允许被访问,请登录后访问"); /** * 错误编码 diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/controller/SysFileInfoController.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/controller/SysFileInfoController.java index d12773fc9..6a5465b21 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/controller/SysFileInfoController.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/controller/SysFileInfoController.java @@ -132,7 +132,7 @@ public class SysFileInfoController { * @author fengshuonan * @date 2020/11/29 11:29 */ - @GetResource(name = "文件预览,通过bucketName和objectName", path = FileConstants.FILE_PREVIEW_BY_OBJECT_NAME, requiredPermission = false) + @GetResource(name = "文件预览,通过bucketName和objectName", path = FileConstants.FILE_PREVIEW_BY_OBJECT_NAME, requiredPermission = false, requiredLogin = false) public void previewByBucketNameObjectName(@Validated(SysFileInfoRequest.previewByObjectName.class) SysFileInfoRequest sysFileInfoRequest) { HttpServletResponse response = HttpServletUtil.getResponse(); sysFileInfoService.previewByBucketAndObjName(sysFileInfoRequest, response); diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java index 1d9e16197..7e7bfa496 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileInfoServiceImpl.java @@ -336,6 +336,17 @@ public class SysFileInfoServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysFileInfo::getFileObjectName, sysFileInfoRequest.getFileObjectName()); + wrapper.eq(SysFileInfo::getSecretFlag, YesOrNotEnum.Y.getCode()); + int count = this.count(wrapper); + if (count > 0) { + if (!LoginContext.me().hasLogin()) { + throw new FileException(FileExceptionEnum.FILE_PERMISSION_DENIED); + } + } + // 获取文件字节码 byte[] fileBytes; try { diff --git a/kernel-d-file/file-sdk-aliyun/src/main/java/cn/stylefeng/roses/kernel/file/aliyun/AliyunFileOperator.java b/kernel-d-file/file-sdk-aliyun/src/main/java/cn/stylefeng/roses/kernel/file/aliyun/AliyunFileOperator.java index 7c1c50517..cb1ab4447 100644 --- a/kernel-d-file/file-sdk-aliyun/src/main/java/cn/stylefeng/roses/kernel/file/aliyun/AliyunFileOperator.java +++ b/kernel-d-file/file-sdk-aliyun/src/main/java/cn/stylefeng/roses/kernel/file/aliyun/AliyunFileOperator.java @@ -29,6 +29,7 @@ import cn.stylefeng.roses.kernel.file.api.FileOperatorApi; import cn.stylefeng.roses.kernel.file.api.enums.BucketAuthEnum; import cn.stylefeng.roses.kernel.file.api.exception.FileException; import cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum; +import cn.stylefeng.roses.kernel.file.api.expander.FileConfigExpander; import cn.stylefeng.roses.kernel.file.api.pojo.props.AliyunOssProperties; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; @@ -197,6 +198,11 @@ public class AliyunFileOperator implements FileOperatorApi { } } + @Override + public String getFileUnAuthUrl(String bucketName, String key) { + return this.getFileAuthUrl(bucketName, key, FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000); + } + @Override public void deleteFile(String bucketName, String key) { ossClient.deleteObject(bucketName, key); diff --git a/kernel-d-file/file-sdk-local/src/main/java/cn/stylefeng/roses/kernel/file/local/LocalFileOperator.java b/kernel-d-file/file-sdk-local/src/main/java/cn/stylefeng/roses/kernel/file/local/LocalFileOperator.java index f95e61641..af3c94e81 100644 --- a/kernel-d-file/file-sdk-local/src/main/java/cn/stylefeng/roses/kernel/file/local/LocalFileOperator.java +++ b/kernel-d-file/file-sdk-local/src/main/java/cn/stylefeng/roses/kernel/file/local/LocalFileOperator.java @@ -178,6 +178,14 @@ public class LocalFileOperator implements FileOperatorApi { return FileConfigExpander.getServerDeployHost() + contextPath + FileConstants.FILE_PREVIEW_BY_OBJECT_NAME + "?fileBucket=" + bucketName + "&fileObjectName=" + key + "&token=" + token; } + @Override + public String getFileUnAuthUrl(String bucketName, String key) { + // 获取context-path + String contextPath = HttpServletUtil.getRequest().getContextPath(); + + return FileConfigExpander.getServerDeployHost() + contextPath + FileConstants.FILE_PREVIEW_BY_OBJECT_NAME + "?fileBucket=" + bucketName + "&fileObjectName=" + key; + } + @Override public void deleteFile(String bucketName, String key) { diff --git a/kernel-d-file/file-sdk-minio/src/main/java/cn/stylefeng/roses/kernel/file/minio/MinIoFileOperator.java b/kernel-d-file/file-sdk-minio/src/main/java/cn/stylefeng/roses/kernel/file/minio/MinIoFileOperator.java index 02f1e80b5..21a384332 100644 --- a/kernel-d-file/file-sdk-minio/src/main/java/cn/stylefeng/roses/kernel/file/minio/MinIoFileOperator.java +++ b/kernel-d-file/file-sdk-minio/src/main/java/cn/stylefeng/roses/kernel/file/minio/MinIoFileOperator.java @@ -214,6 +214,14 @@ public class MinIoFileOperator implements FileOperatorApi { } + @Override + public String getFileUnAuthUrl(String bucketName, String key) { + // 获取context-path + String contextPath = HttpServletUtil.getRequest().getContextPath(); + + return FileConfigExpander.getServerDeployHost() + contextPath + FileConstants.FILE_PREVIEW_BY_OBJECT_NAME + "?fileBucket=" + bucketName + "&fileObjectName=" + key; + } + @Override public void deleteFile(String bucketName, String key) { try { diff --git a/kernel-d-file/file-sdk-tencent/src/main/java/cn/stylefeng/roses/kernel/file/tencent/TenFileOperator.java b/kernel-d-file/file-sdk-tencent/src/main/java/cn/stylefeng/roses/kernel/file/tencent/TenFileOperator.java index 251e24bb9..7160720ec 100644 --- a/kernel-d-file/file-sdk-tencent/src/main/java/cn/stylefeng/roses/kernel/file/tencent/TenFileOperator.java +++ b/kernel-d-file/file-sdk-tencent/src/main/java/cn/stylefeng/roses/kernel/file/tencent/TenFileOperator.java @@ -30,6 +30,7 @@ import cn.stylefeng.roses.kernel.file.api.FileOperatorApi; import cn.stylefeng.roses.kernel.file.api.enums.BucketAuthEnum; import cn.stylefeng.roses.kernel.file.api.exception.FileException; import cn.stylefeng.roses.kernel.file.api.exception.enums.FileExceptionEnum; +import cn.stylefeng.roses.kernel.file.api.expander.FileConfigExpander; import cn.stylefeng.roses.kernel.file.api.pojo.props.TenCosProperties; import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; @@ -250,6 +251,11 @@ public class TenFileOperator implements FileOperatorApi { return url.toString(); } + @Override + public String getFileUnAuthUrl(String bucketName, String key) { + return this.getFileAuthUrl(bucketName, key, FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000); + } + @Override public void deleteFile(String bucketName, String key) { cosClient.deleteObject(bucketName, key); diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/factory/CustomerFactory.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/factory/CustomerFactory.java index 5d69472bd..5b796bbaa 100644 --- a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/factory/CustomerFactory.java +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/factory/CustomerFactory.java @@ -104,7 +104,7 @@ public class CustomerFactory { loginUser.setSimpleUserInfo(simpleUserInfo); // 设置用户头像url - String fileAuthUrl = fileOperatorApi.getFileAuthUrl(CustomerConfigExpander.getCustomerBucket(), customer.getAvatarObjectName(), CustomerConfigExpander.getCustomerBucketExpiredSeconds()); + String fileAuthUrl = fileOperatorApi.getFileUnAuthUrl(CustomerConfigExpander.getCustomerBucket(), customer.getAvatarObjectName()); loginUser.setAvatarUrl(fileAuthUrl); return loginUser; diff --git a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java index 00df81a62..8c09ea55f 100644 --- a/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java +++ b/kernel-s-customer/customer-business/src/main/java/cn/stylefeng/roses/kernel/customer/modular/service/impl/CustomerServiceImpl.java @@ -289,10 +289,9 @@ public class CustomerServiceImpl extends ServiceImpl i BeanUtil.copyProperties(customer, result); // 获取头像的url - String fileAuthUrl = fileOperatorApi.getFileAuthUrl( + String fileAuthUrl = fileOperatorApi.getFileUnAuthUrl( CustomerConfigExpander.getCustomerBucket(), - customer.getAvatarObjectName(), - CustomerConfigExpander.getCustomerBucketExpiredSeconds()); + customer.getAvatarObjectName()); result.setAvatarObjectUrl(fileAuthUrl); // 放入缓存用户信息