業務場景:
如果前端直接上傳文件到OSS,勢必要暴露令牌,無法精准控制上傳內容等,使用臨時令牌即可解決這個問題.
先去阿里雲后台設置好token,角色,地區等
pom.xml
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
生成阿里雲臨時安全令牌(Security Token Service,STS)
@Service
public class OssServicesImpl implements OssServices {
@Value("${oss.AccessKeyId}")
private String AccessKeyId;
@Value("${oss.accessKeySecret}")
private String accessKeySecret;
@Value("${oss.roleArn}")
private String roleArn;
@Value("${oss.regionId}")
private String regionId;
/**
* 生成臨時令牌,用來上傳文件到oss
* @param roleSessionName 用戶角色標識符號,格式:^[a-zA-Z0-9\.@\-_]+$ 2-50個字符
* @return 臨時令牌
*/
@Override
public AssumeRoleResponse getSTS(String roleSessionName) {
DefaultProfile profile = DefaultProfile.getProfile(regionId, AccessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
AssumeRoleRequest request = new AssumeRoleRequest();
request.setRoleArn(roleArn);
request.setRoleSessionName(roleSessionName);
request.setDurationSeconds(1000L); // 設置憑證有效時間
try {
return client.getAcsResponse(request);
} catch (ClientException e) {
System.out.println("Failed:");
System.out.println("Error code: " + e.getErrCode());
System.out.println("Error message: " + e.getErrMsg());
System.out.println("RequestId: " + e.getRequestId());
}
return null;
}
}