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% 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.
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 ..
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:
Als Teil der Bean-Initialisierung wird jede Eigenschaft in BasicAuthAuthorizationInterceptor
basierend auf der Anwendungsumgebung festgelegt. Zum Beispiel, wenn dies die Klasse deiner Bean ist:
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:
Damit die Bindung funktioniert, müssen Sie dasselbe Präfix für die Eigenschaften verwenden, die in application.properties deklariert sind:
%Vor% Sie können @Value
verwenden.
Eigenschaftendatei:
%Vor%Java-Code:
%Vor%Ich denke, Sie suchen nach etwas ähnlichem
Sie können Werte aus .properties ähnlich auswählen und der Karte zuweisen.
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.
Tags und Links spring spring-boot