메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

AWS SDK for Java를 사용하여 Cross-Origin 리소스 공유(CORS) 활성화

AWS SDK for Java를 사용하여 버킷에 대한 cross-origin 리소스 공유(CORS)를 관리할 수 있습니다. CORS에 대한 자세한 내용은 CORS(Cross-Origin Resource Sharing) 단원을 참조하십시오.

이 단원에서는 다음 작업에 대한 샘플 코드와, 모든 작업을 보여 주는 예제 프로그램을 제공합니다.

  • Amazon S3 클라이언트 클래스의 인스턴스 생성

  • 버킷에 CORS 구성 생성 및 추가

  • 기존 CORS 구성 업데이트

Cross-Origin 리소스 공유 메서드

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 구성을 추가합니다.

다음 코드는 CORSRule1 규칙과 CORSRule2 규칙을 만든 후 각 규칙을 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 메서드를 호출하여 버킷에 구성을 추가합니다.

다음 코드는 기존 구성을 가져온 후 NewRule ID로 새 규칙을 추가합니다.

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()); } } }