À l'aide de mot de passe codé pour la source de données utilisée au printemps applicationContext.xml
Je veux garder le mot de passe codé dans mon mentionnés ci-dessous springApplicationContext.xml
Est-il un moyen pour y parvenir?
actuellement j'ai configuré toutes les propriétés à l'aide de la propriété de l'espace réservé
comme indiqué ci-dessous, mais le mot de passe brut est encore ouvert dans ma base de données.propriétés
springApplicationContext.xml
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<beans:property name="driverClassName"><beans:value>${db.driverClassName}</beans:value></beans:property>
<beans:property name="url"><beans:value>${db.url}</beans:value></beans:property>
<beans:property name="username"><beans:value>${db.username}</beans:value></beans:property>
<beans:property name="password"><beans:value>${db.password}</beans:value></beans:property>
</beans:bean>
mais les valeurs réelles sont présents dans mon database.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.username=root
db.password=root
Je veux quelque chose comme ci-dessous:
springApplicationContext.xml (même que ci-dessus)
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<beans:property name="driverClassName"><beans:value>${db.driverClassName}</beans:value></beans:property>
<beans:property name="url"><beans:value>${db.url}</beans:value></beans:property>
<beans:property name="username"><beans:value>${db.username}</beans:value></beans:property>
<beans:property name="password"><beans:value>${db.password}</beans:value></beans:property>
</beans:bean>
Mais le mot de passe de la valeur de la propriété doit être dans encripted format dans mon database.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.username=root
db.password=3g6n72ef8x (using any encription method).
et ma source de données interne de décrypter le mot de passe avant de prendre de nouveaux DB connexion.
Très apprécier pour toute aide/suggestion dans ce.
- L'approche proposée ci-dessous fonctionne très bien quand vous pouvez prendre une chaîne codée et de décoder directement. Mais pour la vraie cryptage, vous ne pouvez pas prendre une chaîne cryptée et juste décrypter: vous prenez un mot de passe en clair, les chiffrer, et de la comparer à la valeur chiffrée. Par exemple, voir org.springframework.de sécurité.crypto.le mot de passe.StandardPasswordEncoder qui est quelque chose comme ce que vous devriez probablement utiliser une fois que vous déplacez au-delà de l'encoder en base64. La question est donc: comment est-ce que votre source de données obtenir le mot de passe pour vérifier l'encontre de la valeur chiffrée de la db.le mot de passe?
- En fait, l'exigence a été de ne pas garder le mot de passe brut ouvrir dans ma base de données.fichier de propriétés. D'où mon CustomDataSource est le décodage de la valeur codée de la base de données.les propriétés de fichier et ensuite l'utiliser pour créer de nouvelles connexions de base de données.
- Je dirais qu'un mot de passe crypté en base64 est essentiellement la même que les raw d'un mot de passe (pas sûr), mais je suppose que la sémantique de l'exigence l'exigence de décideurs de décider.
Vous devez vous connecter pour publier un commentaire.
Sa pourrait être drôle que je réponds à ma propre question. mais je voulais juste dire à ma solution, d'autres personnes qui pourraient avoir face à un même genre de problème..
pour des raisons de simplicité, j'ai utilisé BASE64Encoder & BASE64Decoder. plus tard, je vais modifier mon code pour utiliser un/un meilleur chiffrement/déchiffrement.
J'ai codé mon mot de passe de la base de données(ex: root pour mon cas) en utilisant le code ci-dessous:
et placé de l'encodage du mot de passe de ma base de données.les propriétés de fichier comme ci-dessous:
avant
après
Maintenant, j'ai écrit une classe wrapper pour org.apache.commons.dbcp.BasicDataSource
et remplacé setPassword() méthode:
De cette façon, je suis de décodage(BASE64Decoder) de l'encodage du mot de passe fournis dans la base de données.propriétés
et modifie l'attribut de classe de ma source de données bean mentionné dans springApplicationContext.xml fichier.
Grâce.
De créer des PropertyPlaceHolderConfigurer l'extension de Printemps PropertyPlaceHolderConfigurer
Vous pouvez crypter les propriétés et ajouter SomeText:. Utilisez ce personnalisés PropertyPlaceHolderConfigurer pour charger les propriétés
Créer une classe wrapper mise en œuvre de la
Datasource
interface qui délègue c'est les appels de méthode à la source de données sous-jacente, mais déchiffre le mot de passe avant de le faire.Je voudrais regarder l'image plus grande ici: pourquoi voulez-vous chiffrer les valeurs dans les propriétés de votre fichier? Quel est votre scénario où des personnes non autorisées aient accès à votre fichier de propriétés?
Une technique habituelle pour traiter ce problème de stockage de la production des informations d'identification est de rendre les informations d'identification d'une partie de votre environnement, par opposition à une partie de votre code source. Voici quelques façons de le faire:
Si vous utilisez tomcat pool de connexion en tant que source de données, voici une mise en œuvre
http://www.jdev.it/encrypting-passwords-in-tomcat/
Créer une classe qui étend org.apache.tomcat.jdbc.piscine.DataSourceFactory et le configurer dans le server.xml