メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

AWS SDK for Java を使用した Cross-Origin Resource Sharing(CORS)の有効化

AWS SDK for Java を使用して、バケットの Cross-Origin Resource Sharing(CORS)を管理できます。CORS の詳細については、「Cross-Origin Resource Sharing の有効化」を参照してください。

このセクションでは、次のタスクのサンプルコードと、すべてのタスクを実演する完全なプログラム例を示します。

  • Amazon S3 クライアントクラスのインスタンスの作成

  • CORS 設定の作成とバケットへの追加

  • 既存の CORS 設定の更新

Cross-Origin Resource Sharing のメソッド

AmazonS3Client()

AmazonS3Client オブジェクトを作成します。

setBucketCrossOriginConfiguration()

バケットに適用する CORS 設定を設定します。指定されたバケットに設定が既に存在する場合、既存の設定は新しい設定で置き換えられます。

getBucketCrossOriginConfiguration()

指定されたバケットの CORS 設定を取得します。バケットに設定がない場合、レスポンスの Configuration ヘッダーは null になります。

deleteBucketCrossOriginConfiguration()

指定されたバケットの CORS 設定を削除します。

AWS SDK for Java API の詳細については、『AWS SDK for Java API Reference 』を参照してください。

Amazon S3 クライアントクラスのインスタンスの作成

次のコードスニペットでは、CORS_JavaSDK というクラスの新しい AmazonS3Client インスタンスを作成しています。この例では、AwsCredentials.properties ファイルから accessKeysecretKey の値を取得します。

Copy
AmazonS3Client client; client = new AmazonS3Client(new ProfileCredentialsProvider());

CORS 設定の作成とバケットへの追加

CORS 設定をバケットに追加するには。

  1. ルールを記述する CORSRule オブジェクトを作成します。

  2. BucketCrossOriginConfiguration オブジェクトを作成し、ルールを設定オブジェクトに追加します。

  3. client.setBucketCrossOriginConfiguration メソッドを呼び出して、CORS 設定をバケットに追加します。

次のコードは 2 つのルール CORSRule1CORSRule2 を作成し、各ルールを rules 配列に追加します。rules 配列を使用して、ルールをバケット bucketName に追加します。

Copy
// Add a sample configuration BucketCrossOriginConfiguration configuration = new BucketCrossOriginConfiguration(); List<CORSRule> rules = new ArrayList<CORSRule>(); CORSRule rule1 = new CORSRule() .withId("CORSRule1") .withAllowedMethods(Arrays.asList(new CORSRule.AllowedMethods[] { CORSRule.AllowedMethods.PUT, CORSRule.AllowedMethods.POST, CORSRule.AllowedMethods.DELETE})) .withAllowedOrigins(Arrays.asList(new String[] {"http://*.example.com"})); CORSRule rule2 = new CORSRule() .withId("CORSRule2") .withAllowedMethods(Arrays.asList(new CORSRule.AllowedMethods[] { CORSRule.AllowedMethods.GET})) .withAllowedOrigins(Arrays.asList(new String[] {"*"})) .withMaxAgeSeconds(3000) .withExposedHeaders(Arrays.asList(new String[] {"x-amz-server-side-encryption"})); configuration.setRules(Arrays.asList(new CORSRule[] {rule1, rule2})); // Save the configuration client.setBucketCrossOriginConfiguration(bucketName, configuration);

既存の CORS 設定の更新

既存の CORS 設定を更新するには

  1. client.getBucketCrossOriginConfiguration メソッドを呼び出して、CORS 設定を取得します。

  2. ルールのリストにルールを追加または削除して、設定情報を更新します。

  3. client.getBucketCrossOriginConfiguration メソッドを呼び出して、設定をバケットに追加します。

次のコードは、既存の設定を取得して、ID NewRule の新しいルールを追加する例です。

Copy
// Get configuration. BucketCrossOriginConfiguration configuration = client.getBucketCrossOriginConfiguration(bucketName); // Add new rule. CORSRule rule3 = new CORSRule() .withId("CORSRule3") .withAllowedMethods(Arrays.asList(new CORSRule.AllowedMethods[] { CORSRule.AllowedMethods.HEAD})) .withAllowedOrigins(Arrays.asList(new String[] {"http://www.example.com"})); List<CORSRule> rules = configuration.getRules(); rules.add(rule3); configuration.setRules(rules); // Save configuration. client.setBucketCrossOriginConfiguration(bucketName, configuration);

例 プログラムリスト

次の Java プログラムには、前述のタスクが組み込まれています。

作業サンプルの作成およびテストについては、「Java コード例のテスト」を参照してください。

Copy
import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.BucketCrossOriginConfiguration; import com.amazonaws.services.s3.model.CORSRule; public class Cors { /** * @param args * @throws IOException */ public static AmazonS3Client client; public static String bucketName = "***provide bucket name***"; public static void main(String[] args) throws IOException { client = new AmazonS3Client(new ProfileCredentialsProvider()); // Create a new configuration request and add two rules BucketCrossOriginConfiguration configuration = new BucketCrossOriginConfiguration(); List<CORSRule> rules = new ArrayList<CORSRule>(); CORSRule rule1 = new CORSRule() .withId("CORSRule1") .withAllowedMethods(Arrays.asList(new CORSRule.AllowedMethods[] { CORSRule.AllowedMethods.PUT, CORSRule.AllowedMethods.POST, CORSRule.AllowedMethods.DELETE})) .withAllowedOrigins(Arrays.asList(new String[] {"http://*.example.com"})); CORSRule rule2 = new CORSRule() .withId("CORSRule2") .withAllowedMethods(Arrays.asList(new CORSRule.AllowedMethods[] { CORSRule.AllowedMethods.GET})) .withAllowedOrigins(Arrays.asList(new String[] {"*"})) .withMaxAgeSeconds(3000) .withExposedHeaders(Arrays.asList(new String[] {"x-amz-server-side-encryption"})); configuration.setRules(Arrays.asList(new CORSRule[] {rule1, rule2})); // Add the configuration to the bucket. client.setBucketCrossOriginConfiguration(bucketName, configuration); // Retrieve an existing configuration. configuration = client.getBucketCrossOriginConfiguration(bucketName); printCORSConfiguration(configuration); // Add a new rule. CORSRule rule3 = new CORSRule() .withId("CORSRule3") .withAllowedMethods(Arrays.asList(new CORSRule.AllowedMethods[] { CORSRule.AllowedMethods.HEAD})) .withAllowedOrigins(Arrays.asList(new String[] {"http://www.example.com"})); rules = configuration.getRules(); rules.add(rule3); configuration.setRules(rules); client.setBucketCrossOriginConfiguration(bucketName, configuration); System.out.format("Added another rule: %s\n", rule3.getId()); // Verify that the new rule was added. configuration = client.getBucketCrossOriginConfiguration(bucketName); System.out.format("Expected # of rules = 3, found %s", configuration.getRules().size()); // Delete the configuration. client.deleteBucketCrossOriginConfiguration(bucketName); // Try to retrieve configuration. configuration = client.getBucketCrossOriginConfiguration(bucketName); System.out.println("\nRemoved CORS configuration."); printCORSConfiguration(configuration); } static void printCORSConfiguration(BucketCrossOriginConfiguration configuration) { if (configuration == null) { System.out.println("\nConfiguration is null."); return; } System.out.format("\nConfiguration has %s rules:\n", configuration.getRules().size()); for (CORSRule rule : configuration.getRules()) { System.out.format("Rule ID: %s\n", rule.getId()); System.out.format("MaxAgeSeconds: %s\n", rule.getMaxAgeSeconds()); System.out.format("AllowedMethod: %s\n", rule.getAllowedMethods().toArray()); System.out.format("AllowedOrigins: %s\n", rule.getAllowedOrigins()); System.out.format("AllowedHeaders: %s\n", rule.getAllowedHeaders()); System.out.format("ExposeHeader: %s\n", rule.getExposedHeaders()); } } }