2016-04-22 12 views
0

Mit so etwas wiekeine Klartext-Passwörter im Frühjahr Stiefel ist application.properties

security.user.password = plainTextPassword

innerhalb Frühling Stiefel ist application.properties ist offensichtlich ein Anti-Muster, wie es den Code verhindert von zu einem öffentlichen SCM geschoben werden. In meinen nicht-Spring-Boot-Projekten verwende ich

security.user.password = $ {} myPasswordFromMavenSettingsXML

und lege eine entsprechende <properties/> Referenz in meinem pom.xml. Mit Hilfe des Maven Resource Filter Plugins werden die Passwörter zum Zeitpunkt des Builds ersetzt, so dass die Anwendung Zugriff auf tatsächliche Klartext Passwörter hat, nachdem sie erstellt und bereitgestellt wurde.

Aus irgendeinem Grund funktioniert das Ressourcenfilter-Plugin von Maven in diesem Fall nicht. Gibt es eine Möglichkeit, keine Klartextpasswörter zu einem SCM zu begehen und Spring Boot sie zur Build-Zeit einfügen lassen?

Antwort

4

Spring Boot verfügt über mehrere Mechanismen zur Verfügung gestellt externalized configuration. Einige Beispiele sind Befehlszeilenargumente, Umgebungsvariablen und auch Anwendungseigenschaften außerhalb Ihrer gepackten JAR.

Was ich in der Regel tun:

Lokal wir mehrere Umgebungsvariablen konfiguriert. Die meisten (wenn nicht alle) IDEs ermöglichen es Ihnen, Umgebungsvariablen innerhalb der Ausführungskonfiguration zu konfigurieren. Wenn Sie beispielsweise die spring.datasource.password-Eigenschaft nicht anzeigen möchten, können Sie eine Umgebungsvariable namens SPRING_DATASOURCE_PASSWORD festlegen.

Wenn wir in einer anderen Umgebung bereitstellen, wählen wir normalerweise eine andere application.properties- oder application.yml-Datei innerhalb des gleichen Ordners wie die Anwendung JAR/WAR, da dies auch vom Spring-Boot übernommen wird.


Eine andere Lösung ist Spring cloud zu verwenden, da es eine config servic e hat, die als Micro verwendet werden kann, Konfiguration bereitzustellen. Die Konfiguration kann auch mit SCM versioniert werden, Sie können sie jedoch auf ein separates System stellen, das nicht mit Ihrem Quellcode verbunden ist.

+0

Die Verwendung von '-DSECURITY_USER_PASSWORD = password' hat funktioniert, aber ich habe meine vertraulichen Eigenschaften in' config/application.properties' gespeichert, um auch mit anderen Profilen zu arbeiten. Zusätzlich benutze ich '$ {random.value}' als Werte in regulären 'application.properties' und über Umgebungsvariablen die 'SECURITY_USER_PASSWORD' -Umgebungsvariable für aktuelle Implementierungen in Produktionsumgebungen. – Alex

+0

Um mit verschiedenen Profilen zu arbeiten, habe ich einfach mehrere Laufkonfigurationen in meiner IDE, jede mit verschiedenen Umgebungsvariablen. – g00glen00b

+0

Dies kann lokal durchgeführt werden, aber Sie können dies auf einem Remote-Server tun, auf dem keine Konfigurationsdatendateien bereitgestellt werden können. Daher kann ich etwas wie 'production-profile.properties' nicht auswählen. – Alex

Verwandte Themen