日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阿里云访问控制——OSS——STS

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里云访问控制——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:找不到的話搜索一下。

新增用戶

配置用戶權限

  • 點擊賬號進入詳情

創建權限策略

  • 在左側導航欄的權限管理菜單下,單擊權限策略管理。
  • 單擊新建權限策略。
  • 填寫策略名稱和備注。
  • 腳本配置。
{"Version": "1","Statement": [{"Effect": "Allow","Action": ["oss:GetObject","oss:PutObject","oss:DeleteObject","oss:ListParts","oss:AbortMultipartUpload","oss:ListObjects"],"Resource": ["acs:oss:*:*:z****l","acs:oss:*:*:z****l/*"]}] }

創建角色并記錄角色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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。