跨域资源共享

更新时间: 2020-03-24

目录

设置跨域规则

获取跨域规则

删除跨域规则

本节介绍如何创管理桶的跨域规则。

  • 每个存储桶最多支持10个跨域规则
  • AllowedOrigins和AllowedHeaders最多支持一个星号(*)通配符。
  • 定响应头ExposeHeaders不支持通配符(*)

设置跨区域规则的主要方法为setBucketCrossOriginConfiguration(String bucketName, BucketCrossOriginConfiguration bucketCrossOriginConfiguration), BucketCrossOriginConfiguration主要包含以下属性:

属性 描述
List rules CORSRule包含id、allowedMethods、allowedOrigins、maxAgeSeconds、exposedHeaders、allowedHeaders等设置跨区域规则的具体属性
String id 跨区域规则的id号,用于识别跨区域规则
List allowedMethods 指定用户对访问资源能执行的操作(GET、POST、PUT、DELETE、HEAD等)
List allowedOrigins // 指定允许跨域请求的来源。AllowedOrigins最多支持一个星号()通配符。星号()表示允许所有的域来源或者操作
Long maxAgeSeconds 浏览器对特定资源的预取请求(OPTIONS请求)返回结果的缓存时间,单位为秒
List exposedHeaders 指定响应头,ExposeHeaders不支持通配符(*)
List allowedHeaders // 指定允许用户从应用程序中访问的响应头。AllowedHeaders最多支持一个星号()通配符。星号()表示允许所有的HTTP请求头

设置跨域规则

以下代码用于设置跨域规则:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//设置跨域规则
CORSRule rule = new CORSRule("<CORSruleId>");

// 跨域资源共享规则的容器,每个存储桶最多允许10条跨域规则
List<String> allowedOrigins = new ArrayList<>();

// 指定允许跨域请求的来源。AllowedOrigins最多支持一个星号(*)通配符。星号(*)表示允许所有的域来源或者操作
allowedOrigins.add("www.baidu.com");
rule.setAllowedOrigins(allowedOrigins);

List<String> allowedHeaders = new ArrayList<>();
// 指定允许用户从应用程序中访问的响应头。AllowedHeaders最多支持一个星号(*)通配符。星号(*)表示允许所有的HTTP请求头
allowedHeaders.add("x-oss-testA");
rule.setAllowedHeaders(allowedHeaders);

List<CORSRule.AllowedMethod> allowedMethods = new ArrayList<>();
//指定用户对访问资源能执行的操作(GET、POST、PUT、DELETE、HEAD等)
allowedMethods.add(CORSRule.AllowedMethod.POST);
rule.setAllowedMethods(allowedMethods);

List<String> exposedHeaders = new ArrayList<>();
//指定响应头,ExposeHeaders不支持通配符(*)
exposedHeaders.add("x-oss-testB");
rule.setExposedHeaders(exposedHeaders);

//浏览器对特定资源的预取请求(OPTIONS请求)返回结果的缓存时间,单位为秒
rule.setMaxAgeSeconds(60L);

List<CORSRule> rules = new ArrayList<>();
rules.add(rule);
BucketCrossOriginConfiguration bucketCrossOriginConfiguration = new BucketCrossOriginConfiguration(rules);
ossClient.setBucketCrossOriginConfiguration(bucketName, bucketCrossOriginConfiguration);

获取跨域规则

以下代码用于获取跨域规则:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//获取跨域规则
BucketCrossOriginConfiguration bucketCrossOriginConfiguration = ossClient.getBucketCrossOriginConfiguration(bucketName);
for(CORSRule corsRule : bucketCrossOriginConfiguration.getRules()) {

    for (String allowedOrigin1 : corsRule.getAllowedOrigins()) {
        // 获取允许的跨域请求源。
        System.out.println(allowedOrigin1);
    }

    for (CORSRule.AllowedMethod allowedMethod : corsRule.getAllowedMethods()) {
        // 获取允许的跨域请求方法。
        System.out.println(allowedMethod.toString());
    }

    if (corsRule.getAllowedHeaders().size() > 0){
        for (String allowedHeader1 : corsRule.getAllowedHeaders()) {
            // 获取允许的头部列表。
            System.out.println(allowedHeader1);
        }
    }

    if ( null != corsRule.getMaxAgeSeconds()) {
        System.out.println(corsRule.getMaxAgeSeconds());
    }
}

删除跨域规则

以下代码用于删除跨域规则:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//删除跨域规则
ossClient.deleteBucketCrossOriginConfiguration(bucketName);