- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
目前我将密码 [未加密] 保存在属性文件中。此密码使用 ant 按原样放置在配置 xml 中。
[配置xml是针对datasource的,就是创建dbcp.BasicDataSource的对象]
现在,是否有可能在 ant 目标之后以加密形式复制密码。听说 Jasypt 可以做到这一点!直到现在我还没有尝试过这个。但是,问题并没有就此结束。 BasicDataSource 不接受加密密码。有 BasicDatasource 的替代品吗?
仅供引用:如果重要的话,我正在使用 Spring。
最佳答案
对于 Spring,有一个更好的方法:使用 PropertyPlaceholderConfigurer类(class)。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:com/foo/jdbc.properties</value>
</property>
<property name="propertiesPersister">
<bean class="com.mycompany.MyPropertyPersister" />
</property>
</bean>
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
当您指定 PropertiesPersister 的子类时在属性占位符中,Spring 加载 jdbc.properties
并使用该类解密文件。也许是这样的:
public class MyPropertyPersister extends DefaultPropertiesPersister
{
// ... initializing stuff...
public void load(Properties props, InputStream is) throws IOException
{
Cipher decrypter = getCipher();
InputStream cis = new CipherInputStream(is, decrypter);
super.load(props, cis);
}
public void load(Properties props, Reader reader) throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(reader, baos);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
Cipher decrypter = getCipher();
InputStream cis = new CipherInputStream(bais, decrypter);
InputStreamReader realReader = new InputStreamReader(cis);
super.load(props, realReader);
}
public void loadFromXml(Properties props, InputStream is) throws IOException
{
Cipher decrypter = getCipher();
InputStream cis = new CipherInputStream(is, decrypter);
super.loadFromXml(props, cis);
}
private Cipher getCipher()
{
// return a Cipher to read the encrypted properties file
...
}
...
}
希望对您有所帮助。
编辑如果您使用 Jasypt,则不需要定义任何 PropertiesPersister
。来自Jasypt documentation :
Jasypt provides an implementation of these configuration-related Spring classes which can read .properties files with encrypted values (like the ones managed by the EncryptableProperties class) and handle them transparently to the rest of the Spring application beans.
有了这个,你可以像这样定义jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/reportsdb
jdbc.username=reportsUser
jdbc.password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm)
Spring的配置可能是这样的
<bean class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg>
<bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config">
<bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
</bean>
</property>
</bean>
</constructor-arg>
<property name="locations">
<list>
<value>/WEB-INF/classes/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
这样,您可以在启动应用程序时将解密隐藏属性的密码放在环境变量中,稍后再取消设置。
关于java - 如何在 apache BasicDataSource 中使用加密密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3423135/
我正在尝试将 hibernate 与 spring 集成,我问 - 只是想知道这是否可能 - 我可以使用 @Autowired 和 @Componentscan 来注入(inject) BasicDa
这个问题在这里已经有了答案: ClassCastException when casting to the same class (11 个答案) 关闭 7 年前。 我在尝试检索在 Tomcat 全
我已配置数据源并将自动提交设置为 false。
您好,我在我的项目中使用基于 Spring 的 Web 应用程序,我尝试添加依赖项在 dcbp 1.2 的 pom.xml 中,但它仍然显示错误以上错误 请帮我解决这个问题我尝试了以下方法:添加依赖关
我配置我的数据源: 得到错误: Caused by: org.springframework.beans.factory
在尝试创建一个演示 Spring-MVC 应用程序时,我在启动时遇到了一个问题: ConversionNotSupportedException:无法将类型 org.apache.commons.db
我有一个简短的脚本打开数据源然后关闭它。此脚本使用 BasicDataSource。 BasicDataSource bds = new BasicDataSource(); bds.setDrive
我有使用 Spring JPA 和 Hibernate 开发应用程序的经验。我按照中所述设置了我的数据源 http://blog.springsource.org/2011/11/04/using-c
目前我将密码 [未加密] 保存在属性文件中。此密码使用 ant 按原样放置在配置 xml 中。 [配置xml是针对datasource的,就是创建dbcp.BasicDataSource的对象] 现在
org.apache.commons.dbcp BasicDatasource 和 PoolingDataSoure 有什么区别?两者都支持连接池吗?什么时候使用它们? 最佳答案 BasicDataS
在grails 2.1.0中使用服务时,出现以下异常。关于调试的想法? 造成原因: Caused by: java.lang.IllegalStateException: Already value
在我们的开发数据库 Oracle 11g R2 中,我们注意到通过 Java 应用程序使用 BasicDataSource 打开的连接无限期地保持打开状态。理想情况下,我们希望每个应用程序实例最多有
我使用 spring 访问数据库: XML Spring 上下文: ... 代码: System.out.println("There is : " + new ClassPathXmlA
我正在使用 Apache BasicDataSource 来处理我的数据库代码 - 只是创建方法来执行访问数据库的特定任务。下面是一个示例; /** * Update a users display
我想为BasicDataSource ,任何人都可以告诉我如何添加 。 BasicDataSource dataSource = new BasicDataSource(); //NOSON
我们的服务器在工作中出现问题,我正在尝试了解发生了什么。它是一个在 linux 服务器上运行的 Java 应用程序,该应用程序从 TCP 套接字接收信息并对其进行分析,然后在分析后写入数据库。 有时数
Spring DriverManagerDataSource 和 apache BasicDataSource 有什么区别?哪一个更可取,在什么情况下? 谢谢。 最佳答案 根据 Spring docu
我在 JBoss EAP 服务器中部署了一个 Spring 应用程序,使用以下设置: 如何配置连接池的最小和最大大小? BasicDataSource 的任
尝试启动我的 spring MVC hibernate 应用程序时出现此异常。 SEVERE: Exception sending context initialized event to liste
我正在尝试使用 SSL 保护应用程序中的 MySQL 连接。我目前拥有的相关代码: BasicDataSource dataSource = new BasicDataSource();
我是一名优秀的程序员,十分优秀!