Hibernate with Spring:如何解密hibernate配置的属性文件中的数据库密码

时间:2013-05-16 10:11:10

标签: spring hibernate

下面是我在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>

$ {}内的所有值都来自属性文件并自动设置。 但我在属性文件中的密码是加密格式的,所以我想在解密后设置它。 怎么做?

3 个答案:

答案 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可用于回答/计算值以及创建对象。

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/FactoryBean.html

在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>