So übergeben Sie mapString, String mit application.properties

8

Ich habe einige Berechtigungen in einem Webservice implementiert, der konfiguriert werden muss.

Momentan ist die Benutzer / Passwort-Kombination in die Bean-Konfiguration fest codiert. Ich möchte die Karte mit Benutzern und Kennwörtern in der application.properties konfigurieren, so dass die Konfiguration extern sein kann.

Irgendwelche Hinweise, wie das gemacht werden kann?

%Vor%     
Marco 09.10.2014, 10:10
quelle

5 Antworten

5

Ein java.util.Properties -Objekt ist bereits ein Map , tatsächlich ein HashTable , das wiederum Map implementiert.

Wenn Sie also eine Eigenschaftendatei erstellen (nennen Sie sie users.properties ), können Sie sie mit PropertiesFactoryBean oder <util:properties /> laden und in Ihre Klasse einfügen.

%Vor%

Dann mache etwas wie

%Vor%

Obwohl, wenn Sie ein Map<String, String> als Typ der Benutzereigenschaft haben, könnte es fehlschlagen ... Ich würde sie nicht in die Datei application.properties setzen. Aber das könnte nur ich sein ..

    
M. Deinum 09.10.2014, 11:00
quelle
34

Sie können @ConfigurationProperties verwenden, um Werte von application.properties an eine Bean gebunden zu haben. Dazu notieren Sie Ihre @Bean -Methode, die die Bean erstellt:

%Vor%

Als Teil der Bean-Initialisierung wird jede Eigenschaft in BasicAuthAuthorizationInterceptor basierend auf der Anwendungsumgebung festgelegt. Zum Beispiel, wenn dies die Klasse deiner Bean ist:

%Vor%

Und das sind Ihre application.properties:

%Vor%

Dann wird die Karte users mit zwei Einträgen gefüllt: alice:alpha und bob:bravo .

Hier ist eine kleine Beispiel-App, die das alles zusammensetzt:

%Vor%

Sehen Sie sich die javadoc für ConfigurationProperties für weitere Informationen zu den verschiedenen Konfigurationsoptionen. Zum Beispiel können Sie ein Präfix setzen, um Ihre Konfiguration in eine Anzahl verschiedener Namespaces aufzuteilen:

%Vor%

Damit die Bindung funktioniert, müssen Sie dasselbe Präfix für die Eigenschaften verwenden, die in application.properties deklariert sind:

%Vor%     
Andy Wilkinson 09.10.2014 11:08
quelle
16

Sie können @Value verwenden.

Eigenschaftendatei:

%Vor%

Java-Code:

%Vor%     
Marcos Nunes 13.06.2017 18:40
quelle
0

Ich denke, Sie suchen nach etwas ähnlichem

Ссылка

Sie können Werte aus .properties ähnlich auswählen und der Karte zuweisen.

    
Paul Phoenix 09.10.2014 10:26
quelle
0

IMHO kann man nicht direkt dazu: Eine Eigenschaftendatei wird selbst als Map<String, String> gelesen und so als einfache Zeichenketten bewertet.

Sie könnten sich vorstellen, eine Map in einen String zu codieren und sie dann wieder zu dekodieren, aber es wäre genauso einfach, das in einer dedizierten Datei oder einem bestimmten Ereignis in einer Datenbank zu speichern.

    
Serge Ballesta 09.10.2014 11:41
quelle

Tags und Links