2016-07-10 14 views
0

Projekt ist auf Spring-4 erstellt und verfügt über Beans für SMTP-Verbindung und MySql-Datenbank. Diese Konfigurationen befinden sich jedoch in XML-Dateien zusammen mit lesbaren Kennwörtern. Gibt es Vorschläge, in Spring XML keine lesbaren Passwörter zu haben?Spring Rest API: Kennwortverschlüsselung

Ich habe versucht, durch mehrere Blogs, Websites, aber keine klare Antwort gefunden, zu schätzen, wenn Sie helfen können.

+0

Warum das wichtig, wenn Sie Ihre XML-Konfigurationsdateien sind in einer sicheren Zone? –

+0

@Nguyen: Ich möchte auch diese Perspektive verstehen, glaubst du, WAR-Datei auf Remote-Servern sind sicher genug? Wenn jemand Zugriff darauf bekommt, werden Dinge offengelegt. Also möchte nur zusätzliche Sicherheitsebene haben. –

+0

JDBC-Verbindungsdetails (z. B. für MySQL-Datenbanken) können in eine JNDI-Datenquelle innerhalb des Anwendungsservers verschoben werden. App-Server wie JBoss verschlüsseln normalerweise JNDI-Objektwerte, sodass Ihre JDBC-Verbindungsdetails sicher sind, wenn sie als JNDI-Datenquelle konfiguriert sind. Die SMTP-Verbindungsdetails können in ähnlicher Weise als JNDI-Ressource gespeichert werden. Wenn Sie mit Tomcat arbeiten, müssen Sie die JNDI-Ressourcendetails möglicherweise selbst verschlüsseln und entschlüsseln. – manish

Antwort

0

Sie können das codierte Passwort in die Konfigurationsdatei eingeben und das Passwort in einem benutzerdefinierten DataSource decodieren. Im Anschluss ist die Idee:

1. Encode das Passwort und in die Konfigurationsdatei setzen:

Sie jeden Algorithmus es kodieren können oder mit Verschlüsselung zu sichern. Zum Beispiel Base64 verwenden, um ein Kennwort „myPassword“ auf „bXlQYXNzd29yZA ==“ und in der Konfigurationsdatei zu codieren:

<property name="password"><value>bXlQYXNzd29yZA==</value></property> 

2. Implementieren ein benutzerdefinierten DataSource und dekodieren/das Passwort in dem entsprechenden Verfahren entschlüsseln. Es folgt ein Beispiel, das org.apache.commons.dbcp.BasicDataSource erweitert:

public class CustomDataSource extends BasicDataSource{ 

    public void setPassword(String encodedPassword){ 
     this.password = decodePassword(encodedPassword); 
    } 

    private String decodePassword(String encodedPassword) { 
     // decode or decrypt the encodedPassowrd 
     return decodedPassword; 
    } 
} 

3. Verwenden Sie die benutzerdefinierte DataSource in Ihrer Konfiguration:

<bean id="dataSource" class="CustomDataSource"> 
    <!-- other properties like driverClassName, url, username, etc. --> 
    <property name="password"><value>bXlQYXNzd29yZA==</value></property> 
</bean> 
Verwandte Themen