腾讯云cos-客户端临时密钥

This commit is contained in:
khalil
2024-03-14 12:10:08 +08:00
parent e6f2a94740
commit 2d0b3eb4c9
5 changed files with 111 additions and 0 deletions

View File

@@ -80,6 +80,12 @@
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos-sts_api</artifactId>
<version>${tencentcloud-cos-sts-sdk-java.version}</version>
</dependency>
</dependencies> </dependencies>

View File

@@ -0,0 +1,14 @@
package com.accompany.common.tencent.cos;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@ApiModel
@Data
public class TencentCosTempToken {
private String secretId;
private String secretKey;
private String sessionToken;
}

View File

@@ -6,6 +6,8 @@ import com.accompany.core.exception.ServiceException;
import com.qcloud.cos.COSClient; import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.PutObjectRequest; import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult; import com.qcloud.cos.model.PutObjectResult;
import com.tencent.cloud.CosStsClient;
import com.tencent.cloud.Response;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -13,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.InputStream; import java.io.InputStream;
import java.util.Map;
import java.util.TreeMap;
@Slf4j @Slf4j
@Service @Service
@@ -43,4 +47,59 @@ public class TencentCosUploadService {
return prefix + "/" + fileName; return prefix + "/" + fileName;
} }
@SneakyThrows
public TencentCosTempToken getTempToken(){
TreeMap<String, Object> configMap = new TreeMap<>();
// 替换为您的云 api 密钥 SecretId
configMap.put("secretId", config.getSecretId());
// 替换为您的云 api 密钥 SecretKey
configMap.put("secretKey", config.getSecretKey());
// 设置域名:
// 如果您使用了腾讯云 cvm可以设置内部域名
//configMap.put("host", "sts.internal.tencentcloudapi.com");
// 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600
configMap.put("durationSeconds", 1800);
// 换成您的 bucket
configMap.put("bucket", config.getBucket());
// 换成 bucket 所在地区
configMap.put("region", config.getRegion());
// 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径
// 列举几种典型的前缀授权场景:
// 1、允许访问所有对象"*"
// 2、允许访问指定的对象"a/a1.txt", "b/b1.txt"
// 3、允许访问指定前缀的对象"a*", "a/*", "b/*"
// 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。
configMap.put("allowPrefixes", new String[] {"*"});
// 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。
// 简单上传、表单上传和分块上传需要以下的权限,其他权限列表请参见 https://intl.cloud.tencent.com/document/product/436/30580
String[] allowActions = new String[] {
// 简单上传
"name/cos:PutObject",
// 表单上传、小程序上传
"name/cos:PostObject",
// 分块上传
"name/cos:InitiateMultipartUpload",
"name/cos:ListMultipartUploads",
"name/cos:ListParts",
"name/cos:UploadPart",
"name/cos:CompleteMultipartUpload"
};
configMap.put("allowActions", allowActions);
Response response = CosStsClient.getCredential(configMap);
TencentCosTempToken tempToken = new TencentCosTempToken();
tempToken.setSecretId(response.credentials.tmpSecretId);
tempToken.setSecretKey(response.credentials.tmpSecretKey);
tempToken.setSessionToken(response.credentials.sessionToken);
return tempToken;
}
} }

View File

@@ -0,0 +1,31 @@
package com.accompany.business.controller;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.result.BusiResult;
import com.accompany.common.tencent.cos.TencentCosTempToken;
import com.accompany.common.tencent.cos.TencentCosUploadService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "腾讯云cos上传")
@RestController
@RequestMapping(value = "/tencent/cos")
public class TencentCosController {
@Autowired
private TencentCosUploadService uploadService;
@ApiOperation("获取文件上传凭证")
@SneakyThrows
@Authorization
@GetMapping("/getToken")
public BusiResult<TencentCosTempToken> getToken() {
return BusiResult.success(uploadService.getTempToken());
}
}

View File

@@ -93,6 +93,7 @@
<commons-lang.version>2.6</commons-lang.version> <commons-lang.version>2.6</commons-lang.version>
<tencentcloud-sdk-java.version>3.1.781</tencentcloud-sdk-java.version> <tencentcloud-sdk-java.version>3.1.781</tencentcloud-sdk-java.version>
<tencentcloud-cos-sdk-java.version>5.6.179</tencentcloud-cos-sdk-java.version> <tencentcloud-cos-sdk-java.version>5.6.179</tencentcloud-cos-sdk-java.version>
<tencentcloud-cos-sts-sdk-java.version>3.1.1</tencentcloud-cos-sts-sdk-java.version>
<rocketmq-spring-boot.version>2.2.3</rocketmq-spring-boot.version> <rocketmq-spring-boot.version>2.2.3</rocketmq-spring-boot.version>
<kaptcha.version>2.3.2</kaptcha.version> <kaptcha.version>2.3.2</kaptcha.version>
<hippo4j-core.version>1.5.0</hippo4j-core.version> <hippo4j-core.version>1.5.0</hippo4j-core.version>