最近做一个项目,安全上有点要求,就是要对数据库相关的配置进行加密,配置文件如下:

#加密前
#datasource.type=mysql
#datasource.driverClassName=com.mysql.jdbc.Driver
#datasource.url=jdbc:mysql://localhost:3306/yjj?useUnicode=true&characterEncoding=utf8
#datasource.username=root
#datasource.password=root
#加密后
datasource.type=2DF0ADA00FAA99D2
datasource.driverClassName=DFB084E48D901F55B4765B6B6DEEEA685621CEAB85E65590
datasource.url=CD1E7D3A7DEED845CC284EB8AB50F88E171BEAD6E699A4B2E87A3F36434640EA07523DB201ACF884EF00CBBAD67FB52A04960D6C3E91E3EABF370CE3E6FACD06915D92108869CBB9
datasource.username=63AEB7FA5F01BC70
datasource.password=63AEB7FA5F01BC70
    <!-- 对JDBC配置进行解密  -->
<bean id="propertyConfigurer" class="xxx.security.EncryptablePropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:conf/jdbc.properties</value>
<value>classpath:conf/memcache.properties</value>
</list>
</property>
</bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" >
<property name="driverClass">
<value>${datasource.driverClassName}</value>
</property> <property name="jdbcUrl">
<value>${datasource.url}</value>
</property>
<property name="user">
<value>${datasource.username}</value>
</property>
<property name="password">
<value>${datasource.password}</value>
</property> <property name="minPoolSize">
<value>${datasource.c3p0.minPoolSize}</value>
</property> <property name="maxPoolSize">
<value>${datasource.c3p0.maxPoolSize}</value>
</property> <property name="maxIdleTime">
<value>${datasource.c3p0.maxIdleTime}</value>
</property> <property name="acquireIncrement">
<value>${datasource.c3p0.acquireIncrement}</value>
</property>
<property name="maxStatements">
<value>${datasource.c3p0.maxStatements}</value>
</property>
<property name="initialPoolSize">
<value>${datasource.c3p0.initialPoolSize}</value>
</property> <property name="idleConnectionTestPeriod">
<value>${datasource.c3p0.idleConnectionTestPeriod}</value>
</property> <property name="numHelperThreads">
<value>${datasource.c3p0.numHelperThreads}</value>
</property> <property name="acquireRetryAttempts">
<value>${datasource.c3p0.acquireRetryAttempts}</value>
</property> <property name="breakAfterAcquireFailure">
<value>${datasource.c3p0.breakAfterAcquireFailure}</value>
</property>
<property name="testConnectionOnCheckout">
<value>${datasource.c3p0.testConnectionOnCheckout}</value>
</property>
</bean>

JAVA加密,解密类如下:

import java.util.Properties;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import cn.com.dbappsecurity.common.utils.DesEncrypt;
import cn.com.dbappsecurity.common.utils.MyWebConstant; public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private static final String key = MyWebConstant.JDBC_DESC_KEY; protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
throws BeansException {
try {
// DesEncrypt des = new DesEncrypt();
String username = props.getProperty(MyWebConstant.JDBC_DATASOURCE_USERNAME_KEY);
if (username != null) {
props.setProperty(MyWebConstant.JDBC_DATASOURCE_USERNAME_KEY, DesEncrypt.Decrypt(username, DesEncrypt.hex2byte(key)));
} String password = props.getProperty(MyWebConstant.JDBC_DATASOURCE_PASSWORD_KEY);
if (password != null) {
props.setProperty(MyWebConstant.JDBC_DATASOURCE_PASSWORD_KEY, DesEncrypt.Decrypt(password, DesEncrypt.hex2byte(key)));
} String url = props.getProperty(MyWebConstant.JDBC_DATASOURCE_URL_KEY);
if (url != null) {
props.setProperty(MyWebConstant.JDBC_DATASOURCE_URL_KEY, DesEncrypt.Decrypt(url, DesEncrypt.hex2byte(key)));
} String driverClassName = props.getProperty(MyWebConstant.JDBC_DATASOURCE_DRIVERCLASSNAME_KEY);
if(driverClassName != null){
props.setProperty(MyWebConstant.JDBC_DATASOURCE_DRIVERCLASSNAME_KEY, DesEncrypt.Decrypt(driverClassName, DesEncrypt.hex2byte(key)));
}
String dbtype = props.getProperty(MyWebConstant.JDBC_DATASOURCE_TYPE_KEY);
if(dbtype != null){
props.setProperty(MyWebConstant.JDBC_DATASOURCE_TYPE_KEY, DesEncrypt.Decrypt(dbtype, DesEncrypt.hex2byte(key)));
}
super.processProperties(beanFactory, props);
} catch (Exception e) {
e.printStackTrace();
throw new BeanInitializationException(e.getMessage());
}
}
}
    /******************************JDBC相关BEGIN***************************************/
public static final String JDBC_DESC_KEY = "0001000200030004"; /**数据库类型**/
public static final String JDBC_DATASOURCE_TYPE_KEY = "datasource.type"; public static final String JDBC_DATASOURCE_DRIVERCLASSNAME_KEY = "datasource.driverClassName"; public static final String JDBC_DATASOURCE_URL_KEY = "datasource.url"; public static final String JDBC_DATASOURCE_USERNAME_KEY = "datasource.username"; public static final String JDBC_DATASOURCE_PASSWORD_KEY = "datasource.password"; /******************************JDBC相关END***************************************/

spring jdbc配置文件进行加密解密的更多相关文章

  1. Spring Boot 配置文件密码加密两种方案

    Spring Boot 配置文件密码加密两种方案 jasypt 加解密 jasypt 是一个简单易用的加解密Java库,可以快速集成到 Spring 项目中.可以快速集成到 Spring Boot 项 ...

  2. spring*.xml配置文件明文加密

    spring*.xml配置文件明文加密 说明:客户要求spring*.xml中Oracle/Redis/MongoDB的IP.端口.用户名.密码不能明文存放,接到需求的我,很无奈,但是还是的硬着头皮搞 ...

  3. winform 配置文件的加密解密

    winform 配置文件的加密解密Visual Studio 命令提示(2010) 窗口下直接输入 :解密aspnet_regiis -pdf connectionStrings 程序文件夹全目录 加 ...

  4. Spring boot RSA 文件加密解密

    github项目地址 rsa_demo ##测试 加密D:/hello/test.pdf 文件,生成加密后的文件 testNeedDecode.pdf 对testNeedDecode.pdf 文件进行 ...

  5. spring — jdbc 配置文件的设置

    ---参考配置,  链接mysql 数据库 <!-- 1.配置数据源 --><bean id="dataSource" class="org.sprin ...

  6. C# Note4:XML序列化和反序列化(含加密解密等)

    前言 在项目中,我们经常用到各种配置文件,比如xml文件.binary文件等等,这里主要根据实践经验介绍下xml文件的序列化和反序列化(毕竟最常用). 实践背景:我要做一个用户管理功能,用户账号信息存 ...

  7. Spring cloud config配置文件加密解密

    Spring cloud config配置文件加密解密 学习了:http://blog.csdn.net/u010475041/article/details/78110349 学习了:<Spr ...

  8. java Spring使用配置文件读取jdbc.properties

    Spring使用配置文件读取jdbc.properties 在beans.xml中加入两个必须的bean [html]<bean id="propertyConfigurer" ...

  9. 将 Shiro 作为一个许可为基础的应用程序 五:password加密/解密Spring应用

    考虑系统password的安全,眼下大多数系统都不会把password以明文的形式存放到数据库中. 一把会採取下面几种方式对password进行处理 password的存储 "编码" ...

随机推荐

  1. python 集合从头部删除元素

    num_set = , , , , ]) num_set.pop() print(num_set) num_set.pop() print(num_set)

  2. A_Pancers团队项目设计完善&编码测试

    1:根据OOD详细设计工作要点,修改完善团队项目系统设计说明书和详细设计说明 我们在项目真正开发与测试的过程当中发现我们的项目开发流程不是很明确,我们对于软件开发流程和功能分布做了补充和完善,并且认为 ...

  3. HDU2017新生赛 友好整数

    思路: 很简单的一个状态压缩,比赛时没想出来. 最多只有2^10个状态,n^2暴力一下也就1e6. 代码: #include<bits/stdc++.h> using namespace ...

  4. WinForm一次只打开一个程序

    WinForm如果我们希望一次只打开一个程序,那么我们在程序每次运行的时候都需要检测线程是否存在该程序,如果存在就呼出之前的窗体,C#代码如下: using System; using System. ...

  5. C#将集合和Json格式互相转换的几种方式

    1.使用微软自带的System.Web.Extensions.dll转换,该DLL文件一般存在于如下路径:c:\Program Files\Reference Assemblies\Microsoft ...

  6. PHP求并集,交集,差集

    PHP求并集,交集,差集 一.总结 一句话总结:在php中如果我想要对两个数组进行如并集.交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersec ...

  7. 20170801xlVBA含有公式出现弹窗合并

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Sub GatherD ...

  8. 谈谈http与https

    今天简单的来说一下http和https, 简单来讲: HTTP 是 超文本协议,TCP 端口是 80    HTTPS 是一种配合了SSL协议的.加密的HTTP 协议 ,TCP端口是 443 HTTP ...

  9. android--------动画之进度条

    Android开发中在处理耗时工作的时候,例如:列表加载,大多数会有一个精度条加载的框,里面有一个像gif的图片在旋转一样. 效果图:   <!--     根标签为animation-list ...

  10. HDU-4848 Wow! Such Conquering! (回溯+剪枝)

    Problem Description There are n Doge Planets in the Doge Space. The conqueror of Doge Space is Super ...