跨域资源共享
更新时间: 2020-03-24
目录
本节介绍如何创管理桶的跨域规则。
- 每个存储桶最多支持10个跨域规则
- AllowedOrigins和AllowedHeaders最多支持一个星号(*)通配符。
- 定响应头ExposeHeaders不支持通配符(*)
设置跨区域规则的主要方法为setBucketCrossOriginConfiguration(String bucketName, BucketCrossOriginConfiguration bucketCrossOriginConfiguration), BucketCrossOriginConfiguration主要包含以下属性:
属性 | 描述 |
---|---|
List |
CORSRule包含id、allowedMethods、allowedOrigins、maxAgeSeconds、exposedHeaders、allowedHeaders等设置跨区域规则的具体属性 |
String id | 跨区域规则的id号,用于识别跨区域规则 |
List |
指定用户对访问资源能执行的操作(GET、POST、PUT、DELETE、HEAD等) |
List |
// 指定允许跨域请求的来源。AllowedOrigins最多支持一个星号()通配符。星号()表示允许所有的域来源或者操作 |
Long maxAgeSeconds | 浏览器对特定资源的预取请求(OPTIONS请求)返回结果的缓存时间,单位为秒 |
List |
指定响应头,ExposeHeaders不支持通配符(*) |
List |
// 指定允许用户从应用程序中访问的响应头。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);