2016-03-21 14 views
1

Ich habe eine Play-Framework-Java-Anwendung, die Amazon S3 verwendet und ich möchte nicht meine geheimen Schlüssel und Zugriffsschlüssel in den Konfigurationen festlegen, aber ich möchte es in Umgebungsvariablen speichern, um es zu machen sicherer.Umgebungsvariable kann nicht auf Mac OsX gesetzt werden

Ich habe dieses Plugin:

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

} 

und Methode enabled() Drucke, die Schlüssel zuzugreifen, ist null, was bedeutet, dass ich es nicht richtig in die Umgebungsvariablen gespeichert haben.

Ich öffnete .bash_profile (/Users/me/.bash_profile) mit Befehl atom .bash_profile und klebte ich folgendes: es

export AWS_ACCESS_KEY=myAccessKey 
export AWS_SECRET_KEY=mySecretKey 

und gespeichert. Danach lief ich printenv Befehl, der meine Umgebungsvariablen aufgelistet, aber weder AWS_ACCESS_KEY noch AWS_SECRET_KEY waren dort.

Was mache ich falsch?

+0

Diese Frage steht hier zum Thema, aber Sie erhalten wahrscheinlich eine bessere Antwort bei Super User. – chrylis

Antwort

2

Möglicherweise möchten Sie laufen:

source /Users/me/.bash_profile 

bash_profile wird nur von bash stammen, wenn sie in der interaktiven Login-Modus gestartet.

+0

Ich habe es getan, jetzt werden die Tasten angezeigt, nachdem ich den printenv Befehl ausgeführt habe, aber die Java-Anwendung liest es immer noch nicht. – xpg94

+0

Es funktioniert tatsächlich. Was ich tun muss, ist diesen Befehl auszuführen und danach in der gleichen Terminal-Registerkarte, verwenden Sie Aktivator ausführen, und dann liest es Variablen richtig. – xpg94