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

#加密前
#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. hdu 2824 The Euler function 欧拉函数打表

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. poj 2762 Going from u to v or from v to u? trajan+拓扑

    Going from u to v or from v to u?   Description In order to make their sons brave, Jiajia and Wind t ...

  3. Spring boot 遇到了连接mysql的错误

    问题1: Establishing SSL connection without server's identity verification is not recommended. Accordin ...

  4. DB中字段为null,为空,为空字符串,为空格要怎么过滤取出有效值

      比如要求取出微信绑定的,没有解绑的 未绑定,指定字段为null 绑定的,指定字段为某个字符串 解绑的,有的客户用的是更新指定字段为1,有的客户更新指定字段为‘1’ 脏数据的存在,比如该字段为空字符 ...

  5. 对不队—— Alpha冲刺

    第三天  日期:2018/6/18 一. 今日完成任务:会议内容管理部分 冯晓.马思远:会议网站栏目管理开发,博客撰写 王爽.彭辉:参会人员管理开发 吴琼.郝延婷:审稿专家管理开发 1.1会议管理界面 ...

  6. CentOS Gnome字体不清晰

    需要安装字体:dejavu-sans-mono-fonts The package you need to install is dejavu-sans-mono-fonts. This is the ...

  7. Codeforces 385C - Bear and Prime Numbers(素数筛+前缀和+hashing)

    385C - Bear and Prime Numbers 思路:记录数组中1-1e7中每个数出现的次数,然后用素数筛看哪些能被素数整除,并加到记录该素数的数组中,然后1-1e7求一遍前缀和. 代码: ...

  8. spring-cloud: eureka之:ribbon负载均衡配置(一)

    spring-cloud: eureka之:ribbon负载均衡配置(一) 比如我有: 一个eureka服务:8761 两个user用户服务: 7900/7901端口 一个movie服务:8010 1 ...

  9. Leetcode 86

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  10. 在MAC下安装一些软件时提示"来自身份不明开发者"

    在MAC下安装一些软件时提示"来自身份不明开发者",其实这是MAC新系统启用了新的安全机制.默认只信任 Mac App Store 下载的软件和拥有开发者 ID 签名的应用程序.换 ...