Lors de la configuration de ressources telles que des sources de données ou des serveurs FTP, nous pouvons placer ces informations de configuration dans un fichier d'attribut externe indépendant et nous référer aux éléments d'attribut dans le fichier d'attribut via des espaces réservés tels que $ {user} et $ {mot de passe} dans le fichier de configuration de printemps.
Cette configuration a deux avantages:
Spring fournit un ImpromesPlaceHolderConfigurer qui est capable de référencer les fichiers de propriétés externes lors du chargement d'un bean. PropertyPlaceHolderConfigurer implémente l'interface beanfactoryPostProcessorBean, il s'agit donc d'un postprocesseur d'usine de bean.
1 devis de base
1.1 Méthode PropertyPlaceHolderConfigurer (configuration XML)
Supposons que vous deviez définir une source de données dans le haricot:
<bean id = "dataSource" destrie-Method = "close" p: driverclassname = "com.mysql.jdbc.driver" p: url = "jdbc: mysql: //127.0.0.1: 3306 / spring4" p: username = "root" p: mot de passe = "" />
Ici, le nom de classe de pilote, l'URL JDBC et le nom d'utilisateur et le mot de passe de la base de données sont écrits directement dans XML. De cette façon, si vous devez modifier les informations de configuration de la base de données pendant le déploiement, vous devez d'abord trouver le XML, puis le modifier, ce qui est gênant.
Il est recommandé d'extraire ces informations dans un fichier de configuration, en supposant que le nom est System.pripperties:
DriverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306 / spring4UserName = rootpassword =
Le fichier d'attribut peut définir plusieurs attributs, et le format de chaque attribut est:属性名=属性值
Configuration du ressort:
<! - Introduire un fichier de propriétés externes -> <bean p: location = "classPath: System.properties" p: fileencoding = "utf-8" /> <! - Source de données -> <bean id = "dataSource" destrust-method = "close" p: driverclassname = "$ {driverclassName}" p: url = "$ {url}" p: username = "$ {username}" p: mot de passe = "$ {mot de passe}" />Après cette configuration, nous n'avons besoin de faire attention à ce fichier de configuration lors du déploiement.
PropertyPlaceHolderConfigurer La description de la propriété est la suivante:
| propriété | illustrer |
|---|---|
| emplacement | Spécifie le chemin d'accès au fichier de propriété. |
| lieux | Spécifie le chemin d'accès à plusieurs fichiers d'attribut. |
| Fileencoding | Le format d'encodage du fichier. S'il n'est pas spécifié, Spring utilisera le format de codage par défaut du système d'exploitation pour lire le contenu du fichier. |
| Commande | Si plusieurs propriétés PropertyPlaceHolderConfigurers sont définies dans le fichier de configuration, vous pouvez spécifier l'ordre de priorité via cette propriété. |
| espaceprefix | Suffixe de placement, la valeur par défaut est $ {. |
| Perfets-avant-gardien | Préfixe de placement, la valeur par défaut est}. |
1.2 Contexte: Méthode Property-PlaceHoder (configuration XML)
Vous pouvez utiliser l'espace de noms de contexte pour définir le fichier de propriété, qui est plus élégant que la méthode de configuration de PropertyPlaceHolderConfigurer.
<Context: propriété-placeholder location = "classpath: System.Properties" file-coding = "utf-8" />
Bien que cette méthode exige que la propriété soit cryptée ou les fonctions avancées de l'utilisation de tables de base de données pour enregistrer les informations de configuration, la classe PropertyPlaceHolderConfigurer doit être étendue, puis la méthode de configuration du bean mentionnée précédemment est adoptée.
1.3 Méthode @Value (basée sur la configuration de la classe Annotation ou Java)
Un haricot annoté peut injecter automatiquement les valeurs de propriété dans les variables membre ou les méthodes du haricot annoté par @Value.
@ComponentPublic class CustomDataSource {@Value ("$ {DriverClassName}") String privé DriverClassName; @Value ("$ {url}") URL de chaîne privée; @Value ("$ {nom d'utilisateur}") Nom d'utilisateur de chaîne privée; @Value ("$ {mot de passe}") Mot de passe de chaîne privée; // omettre Getter / Setter}La classe qui annette @configuration basée sur la classe Java elle-même anne @component, donc sa méthode de référence est la même que la méthode de référence basée sur la configuration d'annotation.
Remarque: Pendant l'utilisation, assurez-vous que la valeur d'attribut référencée existe dans le fichier d'attribut et que le type correspond, sinon une exception sera lancée.
2 Valeur d'attribut de chiffrement
Pour les informations d'attribut insensibles, il est raisonnable d'apparaître en texte brut dans le fichier d'attribut, mais si les informations d'attribut sont des informations sensibles (telles que le nom d'utilisateur et le mot de passe de la base de données, etc.), il est recommandé de les enregistrer dans un texte chiffré. Parce que si les informations sensibles sont stockées en texte chiffré, alors toute personne ayant une autorisation de connexion du serveur peut voir des informations confidentielles, ce qui affectera la sécurité du système.
Pour les systèmes qui nécessitent des exigences de sécurité particulièrement élevées (banques, systèmes de sécurité publique, etc.), ces informations sensibles ne devraient être entre les mains de quelques personnels de maintenance spécifiques. Par conséquent, nous devons crypter ces informations, puis décrypter le fichier après que le conteneur à ressort indique le fichier.
PropertyPlaceHolderConfigurer hérite de la classe PlanholderConfigurersupport, qui conçoit des méthodes pour convertir les propriétés avant d'être utilisées:
| méthode | illustrer |
|---|---|
| convertProperty (String PropertyName, String PropertyValue) | Lorsque chaque valeur de propriété est chargée et lue, cette méthode est appelée pour la convertir. |
| String convertProperTyValue (String OriginalValue) | Il est similaire à la méthode précédente, sauf que les paramètres ne sont passés que dans la valeur d'attribut. |
| void convertproperties (propriétés accessoires) | Convertissez toutes les valeurs d'attribut. |
Par défaut, ces trois sont des méthodes vides. Nous pouvons étendre PropertyPlaceHolderConfigurer pour remplacer les méthodes de conversion correspondantes, prenant ainsi en charge les fichiers de valeur de propriété cryptés.
2.1 Classe d'outils de chiffrement et de décryptage des
Le chiffrement des informations est divisé en deux manières: symétrique et asymétrique. Symmétriquement signifie que les informations chiffrées peuvent être déchiffrées, tandis que la méthode asymétrique ne peut pas être déchiffrée comme la valeur d'origine basée sur les informations chiffrées. MD5 appartient au chiffrement asymétrique et DES appartient à un cryptage symétrique. Nous utilisons donc ici DES pour crypter la valeur d'attribut; Lors de la lecture de la valeur d'attribut, utilisez DES pour le décrypter.
Veuillez cliquer ici pour le code source de l'outil de cryptage et de décryptage.
Des instructions de cryptage et de décryptage:
Nous utilisons l'outil DES de cryptage et de décryptage pour crypter le compte et le mot de passe de la base de données via la ligne de commande; Ensuite, écrivez la chaîne cryptée sur System.Properties, qui est la suivante:
username = q5l + 2pprspq = mot de passe = udyjsvkxc / q =
2.2 Crypt la valeur du fichier d'attribut
Tout d'abord, personnalisez le configurateur d'attribut, qui prend en charge la conversion de décryptage:
classe publique CustomPropertyPlaceHolderConfigurer étend PropertyPlaceHolderConfigurer {/ ** * DES Key * / private static final String key_str = "123456"; / ** * Value Crypted Property Nom Group * / public static final String [] Encrypt_Property_Names = new String [] {"username", "mot de passe"}; @Override Protected String convertProperty (String PropertyName, String PropertyValue) {if (! Isdecrypt (propriétéName)) {return PropertyValue; } // Decrypt return new DES (key_str) .decrypt (propriétéValue); } / ** * est-il nécessaire de décrypter * * @param propertyName PropertyName PropertyName * / private boolean isDecrypt (String PropertyName) {return arrayutils.contains (encrypt_property_names, propriété); }}Avis:
Configurez ensuite le fichier d'attribut personnalisé via <ban>:
<bean p: location = "classpath: System.properties" p: fileencoding = "utf-8" />
De cette façon, le conteneur à ressort peut charger les fichiers d'attribut cryptés. N'est-ce pas très simple?
O (∩_∩) o haha ~
3 citations à soi-même
Spring permet des références à la valeur de l'attribut via $ {propName} dans la définition du bean, et permet à l'utilisation de $ {propName} d'implémenter les références mutuelles entre les attributs dans le fichier de propriété.
base de données = Spring4DriverClassName = com.mysql.jdbc.DriverUrl = jdbc: mysql: //127.0.0.1: 3306 / $ {database}Ici, la valeur d'un autre attribut (nom d'instance de base de données) est référencée via $ {base de données}. Par conséquent, pour certaines propriétés complexes, nous pouvons extraire les modifications des propriétés de cette manière pour minimiser la configuration.
Remarque: Si une valeur de propriété est trop longue, nous pouvons ajouter "/" à la fin de chaque ligne, et diviser la valeur de propriété en plusieurs lignes, comme ceci:
profil.jdbc.url = jdbc: mysql: //127.0.0.1: 3306 / dbname? useunicode = true & caractéristique / = utf-8 / & zerodatetimebehavior = converttonull
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.