【问题标题】:Can not set environment variable on Mac OsX无法在 Mac OsX 上设置环境变量
【发布时间】:2016-07-07 19:29:18
【问题描述】:

我有一个使用 Amazon S3 的 play framework java 应用程序,我不想在配置中设置我的秘密和访问密钥,但我想将其保存在环境变量中以使其更安全。

我有这个插件:

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.google.inject.Inject;
import play.Application;
import play.Logger;
import play.Plugin;

public class S3Plugin extends Plugin {

    public static final String AWS_S3_BUCKET = "aws.s3.bucket";
    public static final String AWS_ACCESS_KEY = "aws.access.key";
    public static final String AWS_SECRET_KEY = "aws.secret.key";
    private final Application application;

    public static AmazonS3 amazonS3;

    public static String s3Bucket;

    @Inject
    public S3Plugin(Application application) {
        this.application = application;
    }

    @Override
    public void onStart() {
        String accessKey = application.configuration().getString(AWS_ACCESS_KEY);
        String secretKey = application.configuration().getString(AWS_SECRET_KEY);
        s3Bucket = application.configuration().getString(AWS_S3_BUCKET);

        if ((accessKey != null) && (secretKey != null)) {
            AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
            amazonS3 = new AmazonS3Client(awsCredentials);
            amazonS3.createBucket(s3Bucket);
            Logger.info("Using S3 Bucket: " + s3Bucket);
        }
    }

    @Override
    public boolean enabled() {

        System.out.println("ACCESSKEY "+ application.configuration().keys().contains(AWS_ACCESS_KEY));

        return (application.configuration().keys().contains(AWS_ACCESS_KEY) &&
                application.configuration().keys().contains(AWS_SECRET_KEY) &&
                application.configuration().keys().contains(AWS_S3_BUCKET));
    }

}

并且方法enabled()打印出访问密钥为空,这意味着我没有将其正确保存在环境变量中。

我用命令atom .bash_profile 打开.bash_profile (/Users/me/.bash_profile) 并粘贴以下内容:

export AWS_ACCESS_KEY=myAccessKey
export AWS_SECRET_KEY=mySecretKey

并保存。之后,我运行printenv 命令列出了我的环境变量,但AWS_ACCESS_KEYAWS_SECRET_KEY 都不存在。

我做错了什么?

【问题讨论】:

  • 这个问题在这里有话题,但你可能会在超级用户那里得到更好的答案。

标签: java macos playframework environment-variables


【解决方案1】:

您可能想要运行:

source /Users/me/.bash_profile

bash_profile 仅在以交互式登录模式启动时由 bash 获取。

【讨论】:

  • 我做到了,现在在我运行 printenv 命令后会显示密钥,但 java 应用程序仍然没有读取它。
  • 它确实有效。我要做的是运行该命令,然后在同一个终端选项卡中,使用激活器运行,然后它会正确读取变量。
  • @xpg94,激活器运行是什么意思?
猜你喜欢
  • 2012-03-07
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2018-11-12
  • 2017-07-08
  • 2013-11-27
  • 2011-11-22
相关资源
最近更新 更多