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

#加密前
#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. sudo: /etc/sudoers is world writable sudo: no valid sudoers sources found, q...

    今天操作/etc/sudoers 文件,因为该文件只读,所以sudo chmod 777 /etc/sudoers ,结果可以修改这个文件了,但是导致所有用户的sudo都不能用了 是因为在Linux中 ...

  2. 转载:RESTful API 设计指南

    http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板. ...

  3. 2018年全国多校算法寒假训练营练习比赛(第一场)D N阶汉诺塔变形

    https://www.nowcoder.com/acm/contest/67/D 思路: 先手动模拟一下过程,以下是模拟过程,按顺序表示第几步需要移动的盘标号 1 1 2 1 1 2 1 1 3 1 ...

  4. SQL脚本去重分组统计

    需求:首先有一张表记录学生姓名.科目和成绩,然后模拟插入几条数据,脚本如下: create table score ( Name ),--姓名 subject ),--科目 grade int--成绩 ...

  5. oralce表空间使用情况查询

    SELECT UPPER(F.TABLESPACE_NAME) TABLESPACE_NAME, -- 表空间名, D.TOT_GROOTTE_MB TOT_GROOTTE_MB, -- 表空间大小( ...

  6. English trip -- VC(情景课)5 C It's on Main Street 在主街上

    Grammar focus 语法点: on,   在...上 next to ,   旁边,周围 aross from ,  对面 between  在...之间 in front of  在…前面 ...

  7. Android出现declaration of org.apache.http.message.BasicLineFormatter appears in /system/framework/

    这是由于使用了CloseableHttpClient造成的,把 CloseableHttpClient httpclient = HttpClients.createDefault(); Closea ...

  8. Kilani and the Game CodeForces - 1105D (bfs)

    沙茶bfs打了2小时... queue入队量太大了, 放函数里直接T了, 改成全局46ms #include <iostream> #include <algorithm> # ...

  9. Shell脚本中点号+文件名的作用

    熟悉linux是程序员必须具备的技能,水滴石穿,一点点学习吧. linux中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的.就像windows下的exe一样. 如果我们要执行某一个文件,可 ...

  10. sql连接详解

    笛卡尔乘积: A={a, b},集合B={0, 1, 2},则AxB的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}; (AxB≠BxA) ...