阿里云访问控制——OSS——STS
生活随笔
收集整理的這篇文章主要介紹了
阿里云访问控制——OSS——STS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
阿里云oss——STS
- 阿里官方防盜鏈
- 找到防盜鏈
- 設置可以訪問的域名
- 引入SDK依賴
- 加簽名的URL --待定
- 阿里STS臨時授權
- 原理
- RAM控制臺
- 新增用戶
- 配置用戶權限
- 創建權限策略
- 創建角色并記錄角色ARN。
- 獲取STS臨時授權接口代碼
- 源碼參數說明
- 測試上傳圖片
阿里官方防盜鏈
可以防止爬蟲之類的用原鏈接直接訪問文件。
找到防盜鏈
設置可以訪問的域名
引入SDK依賴
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version> </dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId></dependency><!--阿里臨時授權--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-sts</artifactId> </dependency>加簽名的URL --待定
參考文檔:https://help.aliyun.com/document_detail/31952.html?spm=a2c4g.11186623.2.12.14357e31jWVFdc
https://github.com/aliyun/aliyun-oss-java-sdk/blob/master/src/main/java/com/aliyun/oss/OSSClient.java?spm=a2c4g.11186623.2.11.2c9c6928BHNGyb&file=OSSClient.java
阿里STS臨時授權
原理
RAM控制臺
ps:找不到的話搜索一下。
新增用戶
配置用戶權限
- 點擊賬號進入詳情
創建權限策略
- 在左側導航欄的權限管理菜單下,單擊權限策略管理。
- 單擊新建權限策略。
- 填寫策略名稱和備注。
- 腳本配置。
創建角色并記錄角色ARN。
- 在左側導航欄,單擊RAM角色管理。
- 單擊新建RAM角色,選擇可信實體類型為阿里云賬號,單擊下一步。
- 在新建RAM角色頁面,填寫RAM角色名稱和備注,本示例RAM角色名稱為RamOssTest。
- 選擇云賬號為當前云賬號。
- 單擊完成,之后單擊為角色授權。
獲取STS臨時授權接口代碼
/*** 獲取阿里的臨時授權** @param req* @return*/@ApiOperation("獲取阿里的臨時授權")@GetMapping("/getAliSts")public AssumeRoleResponse.Credentials getAliSts(HttpServletRequest req) {AssumeRoleResponse.Credentials credentials = null;// String roleSessionName = "AliyunDMSRol--ePolicy";String roleSessionName = "zlyftbdoss--ePolicy";String policy = "{\n" +" \"Statement\": [\n" +" {\n" +" \"Action\": [\n" +" \"oss:GetObject\",\n" +" \"oss:PutObject\",\n" +" \"oss:DeleteObject\",\n" +" \"oss:ListParts\",\n" +" \"oss:AbortMultipartUpload\",\n" +" \"oss:ListObjects\"\n" +" ],\n" +" \"Effect\": \"Allow\",\n" +" \"Resource\": [\n" +" \"acs:oss:*:*:z****l/*\",\n" +" \"acs:oss:*:*:z****l\"\n" +" ]\n" +" }\n" +" ],\n" +" \"Version\": \"1\"\n" +"}";try {// 添加endpoint(直接使用STS endpoint,前兩個參數留空,無需添加region ID)DefaultProfile.addEndpoint("", "", "Sts", endpoint);// 構造default profile(參數留空,無需添加region ID)IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);// 用profile構造clientDefaultAcsClient client = new DefaultAcsClient(profile);final AssumeRoleRequest request = new AssumeRoleRequest();request.setMethod(MethodType.POST);request.setRoleArn(roleArn);request.setRoleSessionName(roleSessionName);request.setPolicy(policy); // Optionalrequest.setDurationSeconds(1000L); // 設置憑證有效時間request.setProtocol(ProtocolType.HTTPS); // 必須使用HTTPS協議訪問STS服務);final AssumeRoleResponse response = client.getAcsResponse(request);credentials = response.getCredentials(); // System.out.println("Expiration: " + credentials.getExpiration()); // System.out.println("Access Key Id: " + credentials.getAccessKeyId()); // System.out.println("Access Key Secret: " + credentials.getAccessKeySecret()); // System.out.println("Security Token: " + credentials.getSecurityToken()); // System.out.println("RequestId: " + response.getRequestId());} 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 credentials;}源碼參數說明
-
endpoint:STS接入地址,例如sts.cn-hangzhou.aliyuncs.com
接入地址參考:https://help.aliyun.com/document_detail/66053.html?spm=a2c4g.11186623.2.21.38b23b49geOwWt#reference-sdg-3pv-xdb -
創建用戶時生成的AccessKeyId、AccessKeySecret
-
RoleArn:保存的角色ARN
-
RoleSessionName:用來標識臨時訪問憑證的名稱,建議使用不同的應用程序用戶來區分。
-
Policy:在扮演角色的時候額外添加的權限限制。
測試上傳圖片
/*** 阿里OSS上傳文件* @param file* @param params* @return*/@ApiOperation(value = "阿里OSS上傳文件")@PostMapping("ossUpload")public Result ossUpload(@RequestParam("file") MultipartFile file,@RequestParam("accessKeyId") String accessKeyId,@RequestParam("accessKeySecret") String accessKeySecret,@RequestParam("securityToken") String securityToken){System.out.println("文件信息:"+file+"============"+"其他參數:"+accessKeyId+"其他參數:"+accessKeySecret);Result res=new Result();String filename = file.getResource().getFilename();//這里文件名用了uuid 防止重復,可以根據自己的需要來寫String name = UUID.randomUUID() + filename.substring(filename.lastIndexOf("."), filename.length());name = name.replace("-", "");InputStream inputStream = null;try {inputStream = file.getInputStream();} catch (IOException e) {e.printStackTrace();System.out.println("上傳失敗");}//開啟ossClient;OSSClient ossClient=new OSSClient(ossEndPoint,accessKeyId,accessKeySecret,securityToken);//上傳圖片try {//創建上傳Object的MetadataObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(inputStream.available());objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");objectMetadata.setContentType(getcontentType(name.substring(name.lastIndexOf("."))));objectMetadata.setContentDisposition("inline;filename=" + name);// 指定上傳文件操作時是否覆蓋同名Object。// 不指定x-oss-forbid-overwrite時,默認覆蓋同名Object。// 指定x-oss-forbid-overwrite為false時,表示允許覆蓋同名Object。// 指定x-oss-forbid-overwrite為true時,表示禁止覆蓋同名Object,如果同名Object已存在,程序將報錯。objectMetadata.setHeader("x-oss-forbid-overwrite", "false");//文件前綴SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");String nowDate=sdf1.format(new Date());System.out.println("當前日期是:"+nowDate);String filedir="tbd/"+nowDate+"/";String objectName = filedir + name;//上傳文件ossClient.putObject(bucketName, objectName, inputStream, objectMetadata);// 封裝 url 路徑String url = "http://" + bucketName + "." + ossEndPoint + "/" + objectName;System.out.println(objectName);return res.ok(url);} catch (IOException e) {System.out.println("錯誤信息:"+e.getMessage());} finally {ossClient.shutdown();try {if (inputStream != null) {inputStream.close();}} catch (IOException e) {e.printStackTrace();}}return res;}/*** Description: 判斷OSS服務文件上傳時文件的contentType** @param FilenameExtension 文件后綴* @return String*/public static String getcontentType(String FilenameExtension) {if ("bmp".equalsIgnoreCase(FilenameExtension)) {return "image/bmp";}if ("gif".equalsIgnoreCase(FilenameExtension)) {return "image/gif";}if ("jpeg".equalsIgnoreCase(FilenameExtension) ||"jpg".equalsIgnoreCase(FilenameExtension) ||"png".equalsIgnoreCase(FilenameExtension)) {return "image/jpeg";}if ("html".equalsIgnoreCase(FilenameExtension)) {return "text/html";}if ("txt".equalsIgnoreCase(FilenameExtension)) {return "text/plain";}if ("vsd".equalsIgnoreCase(FilenameExtension)) {return "application/vnd.visio";}if ("pptx".equalsIgnoreCase(FilenameExtension) ||"ppt".equalsIgnoreCase(FilenameExtension)) {return "application/vnd.ms-powerpoint";}if ("docx".equalsIgnoreCase(FilenameExtension) ||"doc".equalsIgnoreCase(FilenameExtension)) {return "application/msword";}if ("xml".equalsIgnoreCase(FilenameExtension)) {return "text/xml";}return "image/jpeg";}總結
以上是生活随笔為你收集整理的阿里云访问控制——OSS——STS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用阿里云oss实现上传视频和图片功能
- 下一篇: ie8位16进制色转换工具