2016-05-24 21 views

risposta

18

È possibile utilizzare Jasypt per crittografare le proprietà, così si potrebbe avere la vostra proprietà come questa:

db.password=ENC(XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=) 

Jasypt consente di crittografare le proprietà utilizzando algoritmi differenti, una volta a ottenere la proprietà crittografata si mette dentro il ENC(...). Per esempio, è possibile crittografare questo modo attraverso Jasypt utilizzando il terminale:

encrypted-pwd$ java -cp ~/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="contactspassword" password=supersecretz algorithm=PBEWithMD5AndDES 

----ENVIRONMENT----------------- 

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 24.45-b08 



----ARGUMENTS------------------- 

algorithm: PBEWithMD5AndDES 
input: contactspassword 
password: supersecretz 



----OUTPUT---------------------- 

XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88= 

di configurare facilmente con molla di avvio è possibile utilizzare il suo antipasto:

jasypt-spring-boot-starter 

tenere a mente, che è necessario avviare l'applicazione utilizzando la stessa password utilizzata per crittografare le proprietà.Così, si può iniziare la vostra applicazione in questo modo:

mvn -Djasypt.encryptor.password=supersecretz spring-boot:run 

È possibile controllare qui di seguito link per maggiori informazioni:

https://www.ricston.com/blog/encrypting-properties-in-spring-boot-with-jasypt-spring-boot/

Per utilizzare le proprietà crittografati a vostra applicazione semplicemente utilizzarlo come al solito, l'uso entrambi i metodi che ti piace (fili stivale primavera la magia, in ogni caso la proprietà deve essere naturalmente nel classpath):

Utilizzando @Value annotazione

@Value("${db.password}") 
private String password; 

o utilizzando Environment

@Autowired 
private Environment environment; 

public void doSomething(Environment env) { 
    System.out.println(env.getProperty("db.password")); 
} 
+2

Potresti spiegarci meglio in dettaglio usando gradle @Frerica Piazza – Johir

+0

Non è chiaro sull'uso con Maven. passi qualche proprietà e quale ulteriore? Dove file di proprietà? come ise questo valore nel codice? – gstackoverflow

+0

@gstackoverflow, la domanda è relativa alla crittografia/decrittografia e viene contrassegnata con l'avvio a molla, l'intenzione era quella di spiegare gli elementi di crittografia e non l'utilizzo delle proprietà. Ad ogni modo, posso modificare questa risposta per darti maggiori dettagli. Nel frattempo, Spring usa questo totalmente trasparente, semplicemente iniettare le proprietà con '@Values ​​(" db.password ")'. Per "dove" è solo il classpath. "Che altro" ... niente, spring boot fa tutta la magia automaticamente –

6

Se si desidera nascondere le password, allora la soluzione più semplice è quello di utilizzare variabili di ambiente in application.properties file o direttamente nel codice.

In application.properties:

mypassword=${password} 

Poi nella classe di configurazione:

@Autowired 
private Environment environment; 

[...]//Inside a method 
System.out.println(environment.getProperty("mypassword")); 

Nella tua configuration classe:

@Value("${password}") 
private String herokuPath; 

[...]//Inside a method 
System.out.println(herokuPath); 

Nota: Potrebbe essere necessario riavviare dopo l'impostazione environme variabile nt. per Windows:

In Windows

consultare questo Documentation per maggiori informazioni.

+3

Non credo che l'impostazione della password principale nell'ambiente vars è una buona idea. La password è ora più esposta del necessario. Fornire una startup come mostrato da Federico è meno esposta e più "sicura" rispetto a impostarla nell'ambiente. – Jaavaaan

+0

Yaa, non è se si sta utilizzando un computer condiviso. Ma se sei l'unico amministratore del tuo computer, nessun altro utente può vedere l'Env Vars. Ho risposto alla parte nascosta e quella più semplice. Ma sì, sono d'accordo che il metodo suggerito da Federico sia molto meglio. –

Problemi correlati