Bei der Konfiguration von Ressourcen wie Datenquellen oder FTP -Servern können wir diese Konfigurationsinformationen in eine unabhängige externe Attributdatei einfügen und auf Attributelemente in der Attributdatei über Platzhalter wie $ {user} und $ {Passwort} in der Spring -Konfigurationsdatei siehe.
Diese Konfiguration hat zwei Vorteile:
Spring bietet ein PropertyPlaceHoldConFigurer, der beim Laden einer Bean auf externe Eigenschaftendateien verweisen kann. PropertyPlaPleholderConFigurer implementiert die BeanfactoryPostProcessorbean -Schnittstelle, daher handelt es sich um einen Postprozessor der Bean -Fabrik.
1 Basiszitat
1.1 PropertyPlaPleholderConFigurer -Methode (XML -Konfiguration)
Angenommen, Sie müssen eine Datenquelle in der Bean definieren:
<bean id = "dataSource" Destroy-method = "close" p: driverClassName = "com.mysql.jdbc.driver
Hier werden der Name der Treiberklasse, die JDBC -URL und der Datenbank -Benutzername und das Passwort direkt in XML geschrieben. Wenn Sie die Datenbankkonfigurationsinformationen während der Bereitstellung ändern müssen, müssen Sie zuerst die XML finden und dann unpraktisch ändern.
Es wird empfohlen, diese Informationen in eine Konfigurationsdatei zu extrahieren, sofern der Name System ist.
DriverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/spring4username = rootPassword =
Die Attributdatei kann mehrere Attribute definieren, und das Format jedes Attributs lautet:属性名=属性值
Federkonfiguration:
<!-- Introduce external properties file--><bean p:location="classpath:system.properties" p:fileEncoding="utf-8"/><!-- Data source--><bean id="dataSource" destroy-method="close" p:driverClassName="${driverClassName}" p:url="${url}" p: userername = "$ {username}" p: password = "$ {password}"/>Nach dieser Konfiguration müssen wir beim Bereitstellen nur auf diese Konfigurationsdatei achten.
PropertyPlacePlaTeholderConFigurer -Eigentumsbeschreibung lautet wie folgt:
| Eigentum | veranschaulichen |
|---|---|
| Standort | Gibt den Pfad zur Eigenschaftsdatei an. |
| Standorte | Gibt den Pfad zu mehreren Attributdateien an. |
| FileEneCoding | Das Codierungsformat der Datei. Wenn nicht angegeben, verwendet Spring das Standard -Codierungsformat des Betriebssystems, um den Inhalt der Datei zu lesen. |
| Befehl | Wenn in der Konfigurationsdatei mehrere PropertyPlaPleholderConFigurer definiert sind, können Sie die Prioritätsreihenfolge über diese Eigenschaft angeben. |
| PlaceholderPrefix | Platzhaltersuffix, Standard ist $ {. |
| Placeholderuffix | Präfix des Platzhalters, Standard ist}. |
1.2 Kontext: Property-Placehoder-Methode (XML-Konfiguration)
Sie können den Kontext -Namespace verwenden, um die Eigenschaftsdatei zu definieren, die eleganter ist als die Konfigurationsmethode von PropertyPlaPleholderConFigurer.
<Kontext: Property-Placeholder location = "classPath: System.Properties" Datei-coding = "utf-8"/>
Obwohl in dieser Methode die Eigenschaft verschlüsselt oder die erweiterten Funktionen der Verwendung von Datenbanktabellen zum Speichern von Konfigurationsinformationen erforderlich sind, muss die zuvor erwähnte PropertyPlaPlaDeholderConFigurer -Klasse erweitert werden, und dann wird die zuvor genannte Bean -Konfigurationsmethode angewendet.
1.3 @Value -Methode (basierend auf Annotation oder Java -Klassenkonfiguration)
Eine kommentierte Bohnen können Eigenschaftswerte automatisch in die von @Value kommentierten Bean -Variablen oder Methoden der Beeinung injizieren.
@ComponentPublic Class CustomDataSource {@Value ("$ {TRAVERCLASSNAME}") private String -TreiberClassName; @Value ("$ {url}") private String url; @Value ("$ {Benutzername}") privater String -Benutzername; @Value ("$ {Passwort}") privates Zeichenfolgenkennwort; // Getter/Setter} weglassenDie Klasse, die @Configuration basierend auf der Java -Klasse selbst bezeichnet, kommentiert @Component. Daher ist die Referenzmethode die gleiche wie die Referenzmethode basierend auf der Annotationskonfiguration.
HINWEIS: Stellen Sie während der Verwendung sicher, dass der referenzierte Attributwert in der Attributdatei und der Typ -Übereinstimmungen vorhanden ist, da ansonsten eine Ausnahme ausgelöst wird.
2 Verschlüsselungsattributwert
Für unempfindliche Attributinformationen ist es vernünftig, in der Attributdatei im Klartext zu erscheinen. Wenn die Attributinformationen jedoch sensible Informationen sind (z. B. Benutzername und Kennwort für Datenbank, usw.), wird empfohlen, sie in Ciphertext zu speichern. Denn wenn die sensiblen Informationen CipheText gespeichert sind, kann jeder mit Serveranmeldemaßnahmen vertrauliche Informationen erkennen, die sich auf die Systemsicherheit auswirken.
Für Systeme, die besonders hohe Sicherheitsanforderungen (Banken, öffentliche Sicherheitssysteme usw.) erfordern, sollten diese sensiblen Informationen nur in den Händen einiger spezifischer Wartungspersonal liegen. Daher müssen wir diese Informationen verschlüsseln und dann die Datei entschlüsseln, nachdem der Federcontainer die Datei gelesen hat.
PropertyPlaceHoldConFigurer erbt von der PlaceholderConFigurersupport -Klasse, die Methoden zum Umwandeln von Eigenschaften vor ihrer Verwendung entwirft:
| Verfahren | veranschaulichen |
|---|---|
| ConvertProperty (String PropertyName, String PropertyValue) | Wenn jeder Eigenschaftswert geladen und gelesen wird, wird diese Methode aufgerufen, um sie zu konvertieren. |
| String ConvertPropertyValue (String OriginalValue) | Es ähnelt der vorherigen Methode, außer dass die Parameter nur im Attributwert übergeben werden. |
| void ConvertProperties (Eigenschaften von Requisiten) | Konvertieren Sie alle Attributwerte. |
Standardmäßig sind diese drei leere Methoden. Wir können PropertyPlacePlaTeholderConFigurer erweitern, um die entsprechenden Conversion -Methoden zu überschreiben, wodurch verschlüsselte Eigenschaftswertdateien unterstützt werden.
2.1 DES -Verschlüsselungs- und Entschlüsselungswerkzeugklasse
Die Verschlüsselung von Informationen wird in zwei Arten unterteilt: symmetrisch und asymmetrisch. Symmetrisch bedeutet, dass die verschlüsselten Informationen entschlüsselt werden können, während die asymmetrische Methode nicht als ursprünglicher Wert entschlüsselt werden kann, der auf den verschlüsselten Informationen basiert. MD5 gehört zur asymmetrischen Verschlüsselung und DES gehört zur symmetrischen Verschlüsselung. Hier verwenden wir DES, um den Attributwert zu verschlüsseln. Wenn Sie den Attributwert lesen, verwenden Sie DES, um ihn zu entschlüsseln.
Bitte klicken Sie hier, um den Quellcode des DES -Verschlüsselung und des Entschlüsselungswerkzeugs zu entschlüsseln.
DES -Verschlüsselungs- und Entschlüsselungsanweisungen:
Wir verwenden das DES -Verschlüsselungs- und Entschlüsselungs -Tool, um das Datenbankkonto und das Passwort über die Befehlszeile zu verschlüsseln. Schreiben Sie dann die verschlüsselte Zeichenfolge an System.Properties, was wie folgt lautet:
userername = q5l+2PPRSPQ = password = udyjsvkxc/q =
2.2 Verschlüsseln Sie den Wert der Attributdatei
Passen Sie zunächst den Attributkonfigurator an, der die Entschlüsselungskonvertierung unterstützt:
Public Class CustomPropertyPlaPleholderConFigurer erweitert PropertyPlaPleholderConFigur { / *** Des Key* / private statische endgültige String -Key_str = "123456"; / *** Value Encryptedeigenschaftsname Gruppe*/ public static final String [] ENCRYPT_PROPERTY_NAMES = NEW STRING [] {"Benutzername", "Passwort"}; @Override Protected String ConvertProperty (String PropertyName, String PropertyValue) {if (! Isdecrypt (PropertyName)) {return PropertyValue; } // decrypt return New DES (KEY_STR) .Decrypt (PropertyValue); } / ** * ist notwendig, * * @param PropertyName PropertyName PropertyName * / private boolean isDeCrypt (String PropertyName) {return Arrayutils.contains (Encrypt_property_names, PropertyName); }}Beachten:
Konfigurieren Sie dann die benutzerdefinierte Attributdatei über <Bean>:
<bean p: location = "classPath: System.Properties" P: FileEnoDing = "UTF-8"/>
Auf diese Weise kann der Federcontainer die verschlüsselten Attributdateien laden. Ist es nicht sehr einfach?
O (∩_∩) o haha ~
3 Zitate für sich
In der Bean -Definition können Sie auf den Wert des Attributs über $ {propname} auf den Wert des Attributs verweisen, und ermöglicht auch die Verwendung von $ {propname}, gegenseitige Referenzen zwischen den Attributen in der Eigenschaftsdatei zu implementieren.
Datenbank = Spring4DriverClassName = com.mysql.jdbc.driverurl = JDBC: MySQL: //127.0.1: 3306/$ {Datenbank}Hier wird der Wert eines anderen Attributs (Datenbankinstanzname) über $ {Datenbank} referenziert. Daher können wir für einige komplexe Eigenschaften die Änderungen der Eigenschaften auf diese Weise extrahieren, um die Konfiguration zu minimieren.
Hinweis: Wenn ein Eigenschaftswert zu lang ist, können wir "/" zum Ende jeder Zeile hinzufügen und den Eigenschaftswert in mehrere Zeilen unterteilen, genau wie diese:
profil.jdbc.url = jdbc: mysql: //127.0.0.1: 3306/dbname? useUnicode = true & charakterität/= utf-8/& zerodatetimebehavior = convertonull
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.