开发者社区 问答 正文

Java-SDK之如何实现跨域资源共享?

跨域资源共享(CORS)允许web端的应用程序访问不属于本域的资源。OSS提供接口方便开发者控制跨域访问的权限。更多关于跨域资源共享的内容请参考 跨域访问

设定CORS规则


通过setBucketCors 方法将指定的存储空间上设定一个跨域资源共享CORS的规则,如果原规则存在则覆盖原规则。具体的规则主要通过CORSRule类来进行参数设置。代码如下:

  1. SetBucketCORSRequest request = new SetBucketCORSRequest();
  2. request.setBucketName(bucketName);
  3. //CORS规则的容器,每个bucket最多允许10条规则
  4. ArrayList<CORSRule> putCorsRules = new ArrayList<CORSRule>();
  5. CORSRule corRule = new CORSRule();    
  6. ArrayList<String> allowedOrigin = new ArrayList<String>();
  7. //指定允许跨域请求的来源
  8. allowedOrigin.add( "http://www.b.com");
  9. ArrayList<String> allowedMethod = new ArrayList<String>();
  10. //指定允许的跨域请求方法(GET/PUT/DELETE/POST/HEAD)
  11. allowedMethod.add("GET");              
  12. ArrayList<String> allowedHeader = new ArrayList<String>();
  13. //控制在OPTIONS预取指令中Access-Control-Request-Headers头中指定的header是否允许。
  14. allowedHeader.add("x-oss-test");      
  15. ArrayList<String> exposedHeader = new ArrayList<String>();
  16. //指定允许用户从应用程序中访问的响应头
  17. exposedHeader.add("x-oss-test1");      
  18. corRule.setAllowedMethods(allowedMethod);
  19. corRule.setAllowedOrigins(allowedOrigin);
  20. corRule.setAllowedHeaders(allowedHeader);
  21. corRule.setExposeHeaders(exposedHeader);
  22. //指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。
  23. corRule.setMaxAgeSeconds(10);          
  24. //最多允许10条规则
  25. putCorsRules.add(corRule);            
  26. request.setCorsRules(putCorsRules);
  27. oss.setBucketCORS(request);

提示:
  • 每个存储空间最多只能使用10条规则。
  • AllowedOrigins和AllowedMethods都能够最多支持一个”*”通配符。”*”表示对于所有的域来源或者操作都满足。
  • 而AllowedHeaders和ExposeHeaders不支持通配符。


获取CORS规则


我们可以参考存储空间的CORS规则,通过GetBucketCors方法。代码如下:
  1. ArrayList<CORSRule> corsRules;
  2. //获得CORS规则列表
  3. corsRules =  (ArrayList<CORSRule>) oss.getBucketCORSRules(bucketName);
  4. for (CORSRule rule : corsRules) {
  5.     for (String allowedOrigin1 : rule.getAllowedOrigins()) {
  6.         //获得允许跨域请求源
  7.         System.out.println(allowedOrigin1);
  8.     }
  9.     for (String allowedMethod1 : rule.getAllowedMethods()) {
  10.         //获得允许跨域请求方法
  11.         System.out.println(allowedMethod1);
  12.     }  
  13.     if (rule.getAllowedHeaders().size() > 0){
  14.         for (String allowedHeader1 : rule.getAllowedHeaders()) {
  15.             //获得允许头部列表
  16.             System.out.println(allowedHeader1);
  17.         }
  18.     }
  19.     if (rule.getExposeHeaders().size() > 0) {
  20.         for (String exposeHeader : rule.getExposeHeaders()) {
  21.         //获得允许头部
  22.         System.out.println(exposeHeader);
  23.         }
  24.     }
  25.     if ( null != rule.getMaxAgeSeconds()) {
  26.         System.out.println(rule.getMaxAgeSeconds());
  27.     }
  28. }


删除CORS规则


用于关闭指定存储空间对应的CORS并清空所有规则。
  1. // 清空bucket的CORS规则
  2. oss.deleteBucketCORSRules(bucketName);

展开
收起
青衫无名 2017-10-18 11:07:24 1435 分享 版权
阿里云 AI 助理回答

您已经详细描述了在阿里云对象存储服务(OSS)中设置、获取和删除跨域资源共享(CORS)规则的方法,这些操作都是通过阿里云提供的SDK来完成的。为了方便理解,我将再次概述这些步骤,并提供一些额外的上下文信息。

设定CORS规则

  1. 创建请求对象:首先,您需要创建一个SetBucketCorsRequest对象,指定要设置CORS规则的存储空间(Bucket)名称。
  2. 定义CORS规则:通过CORSRule类定义具体的CORS规则,包括允许的来源域名(AllowedOrigins)、允许的HTTP方法(AllowedMethods)、允许的请求头(AllowedHeaders)、可以暴露给浏览器的响应头(ExposeHeaders),以及预检请求(OPTIONS)结果的最大缓存时间(MaxAgeSeconds)。
  3. 添加并设置规则:将定义好的规则添加到一个ArrayList中,然后用这个ArrayList设置请求对象的CORS规则,并调用oss.setBucketCORS(request)方法应用这些规则。

获取CORS规则

  • 使用oss.getBucketCORSRules(bucketName)方法获取指定Bucket的CORS规则列表,然后遍历这个列表以查看或处理每个规则的具体内容,如允许的源、方法等。

删除CORS规则

  • 要删除某个Bucket的所有CORS规则,只需调用oss.deleteBucketCORSRules(bucketName)方法即可。这会关闭该Bucket上的CORS功能,并清除所有之前设定的规则。

注意事项

  • 每个Bucket最多只能设置10条CORS规则。
  • 在设置规则时,AllowedOriginsAllowedMethods支持使用“*”作为通配符,表示允许任何来源或任何方法,但AllowedHeadersExposeHeaders不支持通配符。
  • CORS是现代Web开发中的重要机制,它允许Web页面从不同的源加载资源而不会受到同源策略的限制,这对于实现API接口的跨域调用至关重要。

确保在进行这些操作时,您已正确安装并配置了阿里云OSS SDK,并且拥有足够的权限来管理目标Bucket的CORS设置。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答