Spring AWS Context凭据 - 不起作用

时间:2018-01-03 19:16:57

标签: java spring spring-integration-aws

我遇到与here提到的问题类似的问题。我正在使用spring xml配置。我指定了全局AWS上下文凭据。我使用S3出站通道适配器从S3下载文件。我在config.properties文件中指定了我的密钥。我仍然没有看到用于与S3交谈的凭据。

S3-read.xml

db.collection.aggregate([{
        $project : {
            fieldExists : {
                $indexOfBytes : ['$field', 'string']
            }
        }
    }, {
        $match : {
            fieldExists : {
                $gt : -1
            }
        }
    }, {
        $limit : 5
    }
]);

AWS-credentials.xml

<int-aws:s3-outbound-channel-adapter  
               transfer-manager="transferManager"
               bucket-expression="'${s3.bucket}'"
               command-expression="'DOWNLOAD'"
               key-expression="headers.S3Key"
               progress-listener="progressListener" /> 

config.properties

<aws-context:context-credentials>
<aws-context:simple-credentials access-key="${aws.accesskey}"
                                secret-key="${aws.secretkey}"/>
</aws-context:context-credentials> 

<!-- Define global region -->
<aws-context:context-region region="${aws.region}"/> 

例外是:

aws.accesskey=accesskey
aws.secretkey=secretkey
aws.region=us-west-2

我花了很多时间。当我尝试调试时,它似乎寻找默认凭证提供程序链,它正在寻找环境变量或〜/ .aws / credentials文件。我没有指定任何东西。

如何链接S3以使用这些凭据?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

在我的项目中,我使用了&#34; BasicAWSCredentials&#34;像这样

public S3StorageService(AmazonS3Config s3Configs) {
    ClientConfiguration opts = new ClientConfiguration();
    opts.setSignerOverride("S3SignerType");
    BasicAWSCredentials credentials = new BasicAWSCredentials(s3Configs.getAccessKey(), s3Configs.getSecretKey());
    AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
            .withEndpointConfiguration(new EndpointConfiguration(s3Configs.getServiceEndpoint(), ""))
            .withClientConfiguration(opts).build();
    String defaultBucket = s3Configs.getDefaultBucket();

}

@ConfigurationProperties(prefix = "ds31s3.amazon")
public class AmazonS3Config {   
    private String  accessKey;
    private String  secretKey;
    private String  serviceEndpoint;    
    private String  defaultBucket;
在application.properties中

#Amazon S3 Configs
ds31s3.amazon.accessKey=<KEY>
ds31s3.amazon.secretKey=<SECRETKEY>
ds31s3.amazon.serviceEndpoint=<ENDPOINT>
ds31s3.amazon.defaultBucket=bucket-karthik

它运作良好。