我创建了一个程序的JAR可执行文件,该程序使用AWS与DynamoDB数据库进行通信。我记得通过Eclipse设置我的凭据,以便我可以访问数据库,但这似乎没有转移到JAR文件,因为这些凭据保存在我的计算机上,并且不会与JAR打包在一起。我注意到JAR实际上可以访问我用来创建它的计算机上的数据库,但是在任何其他计算机上,任何需要程序访问数据库的任务都会显示错误消息“错误扫描表:无法加载来自链中任何提供商的AWS凭证。“
我应该如何在应用中包含凭据,以确保运行JAR的任何人都可以访问数据库?
编辑:如果它有所作为,我认为我最初设置凭据的方式是在Eclipse中通过AWS>偏好>配置文件配置。
答案 0 :(得分:2)
根据您发布的内容,我看到了一些选项:
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
并将其导出以供用户运行。System.setProperty("aws.accessKeyId", "youraccesskey")
和System.setProperty("aws.secretKey", "yoursecretkey")
来设置这些作为系统属性。最后两条建议非常危险。您今天可能会信任您的用户,但当其中一个用户不再信任时会发生什么?第一个选项允许您禁用单个用户。
答案 1 :(得分:1)
我不建议在JAR中使用硬编码凭据,但如果你真的想要它,有几种方法。
创建客户端时,您可以使用.withCredentials()
传递密钥和密钥。例如:
BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key");
AmazonDynamoDBClient dbClient = AmazonDynamoDBClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
如果要使其全局化并让每个客户端自动使用它,您可以在使用任何AWS代码之前设置这些Java属性:
System.setProperty("aws.accessKeyId", "access_key_id");
System.setProperty("aws.secretKey", "secret_key");
有关详细信息,请参阅:
http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html
答案 2 :(得分:1)
您可以通过以下方式编程创建“AWSCredentials”对象:
AWSCredentials credentials = new AWSCredentials() {
public String getAWSSecretKey() { return "your secret key here"; }
public String getAWSAccessKeyId() { return "your access id here"; }
};
AmazonSimpleDB simpleDb = new AmazonSimpleDBClient(credentials);
AmazonS3Client = new AmazonS3Client(credentials);
//and so on...