下面是我在hibernate-config.xml文件中的bean
<bean id="myDataSource" class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
<property name="url" value="jdbc:mysql://${indy.web.database.host}:${indy.web.database.port}/${indy.web.database.name}" />
<property name="user" value="${indy.web.database.login}" />
<property name="password" value="${indy.web.database.password}" />
</bean>
$ {}内的所有值都来自属性文件并自动设置。 但我在属性文件中的密码是加密格式的,所以我想在解密后设置它。 怎么做?
答案 0 :(得分:0)
实现此目的的一种简单方法是使用jasypt提供的属性占位符配置器而不是构建属性palceholder configurer。
<bean id="propertyConfigurer"
class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="configurationEncryptor" />
<property name="locations">
<list>
<value>/WEB-INF/classes/application.properties</value>
</list>
</property>
</bean>
此页面提供完整的配置详情 - http://www.jasypt.org/spring3.html
答案 1 :(得分:0)
定义一个Spring FactoryBean,它将解码'密码'值&amp;把它返还。工厂Bean可用于回答/计算值以及创建对象。
在Spring配置中引用bean,然后会为您提供已回答的值。
如果你需要Properties对象&amp;中的值。无法以其他方式获取它,您可以创建一个属性工厂,它将包含已解码的值和已配置的属性。
答案 2 :(得分:0)
使用您的类
子类MysqlDataSource这样的事情:
public class DatasourceWithEncPass extends MysqlDataSource{
public void setPassword(String passowrd){
//decrypt the password here before setting it
}
..
}
在上下文中使用此类:
<bean id="myDataSource" class="com.yourpackage.DatasourceWithEncPass">
<property name="url" value="jdbc:mysql://${indy.web.database.host}:${indy.web.database.port}/${indy.web.database.name}" />
<property name="user" value="${indy.web.database.login}" />
<property name="password" value="${indy.web.database.password}" />
</bean>