【发布时间】:2012-10-01 19:48:08
【问题描述】:
我想在下面提到的 springApplicationContext.xml 中保留编码密码
有什么方法可以实现吗?
目前我已经使用属性占位符配置了所有属性 如下所示,但原始密码仍然在我的 database.properties 中打开
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>
但实际值存在于我的database.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.username=root
db.password=root
我想要类似下面的东西:
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>
但是密码属性值应该是我database.properties中的加密格式
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.username=root
db.password=3g6n72ef8x (using any encription method).
在建立新的数据库连接之前,我的数据源会在内部解密密码。
非常感谢您对此提供的任何帮助/建议。
【问题讨论】:
-
当您可以获取编码字符串并直接对其进行解码时,您在下面建议的方法可以正常工作。但是对于真正的加密,您不能获取加密字符串并对其进行解密:您获取明文密码,对其进行加密,然后将其与已加密的值进行比较。例如,请参阅 org.springframework.security.crypto.password.StandardPasswordEncoder ,它类似于您在经过 base64 编码器后可能会使用的东西。所以问题是:你的 DataSource 如何获取实际密码来检查 db.password 的加密值?
-
实际上,要求不是在我的 database.properties 文件中保持原始密码处于打开状态。因此,我的 CustomDataSource 正在解码 database.properties 文件的编码值,然后用于创建新的数据库连接。
-
我认为 base64 编码密码本质上与原始密码相同(即不安全),但我猜需求的语义由需求制定者决定。
标签: spring hibernate datasource apache-commons-dbcp password-encryption