文档章节

spring-jdbc文件数据库配置加密

weiliu007
 weiliu007
发布于 2016/08/25 19:45
字数 386
阅读 17
收藏 0

  一般spring容器启动时,通过PropertyPlaceholderConfigurer类读取jdbc.properties文件里的数据库配置信息。

通过这个原理,我们把加密后的数据库配置信息放到jdbc.properties文件里,然后自定义一个继承PropertyPlaceholderConfigurer的类,实现解密,把解密后的信息又放回去。最后在配置DataSource时,还是用占位符${}取配置信息。

 

jdbc.properties文件内容:

Properties代码 

 

 

  1. jdbc.driverClassName = 4A490AA9B8CD7DBD61E70367C868F950541890F991000CD76A707177A0A507B9  
  2. jdbc.url = FA0DD23D31BCF4C6058626849C4611455A74B444893626DE9CF7D1E05F15586C54C098BFA29BC54A  
  3. jdbc.username = 5DE376A122083A8945FF13A1D5AFD452  
  4. jdbc.password = 5DE376A122083A8945FF13A1D5AFD452  

 

 

自定义的取加密信息的类EncryptablePropertyPlaceholderConfigurer

Java代码 

  1. public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {  
  2.     private static final String key = "0002000200020002";  
  3.   
  4.     protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)  
  5.         throws BeansException {  
  6.             try {  
  7.                 Des des = new Des();  
  8.                 String username = props.getProperty("jdbc.username");  
  9.                 if (username != null) {  
  10.                     props.setProperty("jdbc.username", des.Decrypt(username, des.hex2byte(key)));  
  11.                 }  
  12.                   
  13.                 String password = props.getProperty("jdbc.password");  
  14.                 if (password != null) {  
  15.                     props.setProperty("jdbc.password", des.Decrypt(password, des.hex2byte(key)));  
  16.                 }  
  17.                   
  18.                 String url = props.getProperty("jdbc.url");  
  19.                 if (url != null) {  
  20.                     props.setProperty("jdbc.url", des.Decrypt(url, des.hex2byte(key)));  
  21.                 }  
  22.                   
  23.                 String driverClassName = props.getProperty("jdbc.driverClassName");  
  24.                 if(driverClassName != null){  
  25.                     props.setProperty("jdbc.driverClassName", des.Decrypt(driverClassName, des.hex2byte(key)));  
  26.                 }  
  27.                   
  28.                 super.processProperties(beanFactory, props);  
  29.             } catch (Exception e) {  
  30.                 e.printStackTrace();  
  31.                 throw new BeanInitializationException(e.getMessage());  
  32.             }  
  33.         }  

 

Des.java是一个用Des算法加密和解密的工具类

Java代码 

 

  1. //加密  
  2. public static String Encrypt(String str, byte[] key){  
  3.     Security.addProvider(new com.sun.crypto.provider.SunJCE());  
  4.     byte[] encrypt = encryptMode(key, str.getBytes());  
  5.     return byte2hex(encrypt);  
  6. }  
  7.   
  8. //解密  
  9. public static String Decrypt(String str, byte[] key){  
  10.     Security.addProvider(new com.sun.crypto.provider.SunJCE());  
  11.     byte[] decrypt = decryptMode(key, hex2byte(str));   
  12.     return new String(decrypt);  
  13. }  

 

 

spring配置:

Xml代码 

 

  1. <bean id="propertyConfigurer"    
  2.       class="com.eeds.core.security.datasource.EncryptablePropertyPlaceholderConfigurer">    
  3.        <property name="locations">    
  4.            <list>    
  5.                <value>classpath:config/spring/jdbc-test.properties</value>    
  6.            </list>    
  7.        </property>    
  8.    </bean>  

 

Xml代码 

 

  1. <!-- 测试环境 -->  
  2. <bean id="econsoleDS" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
  3.     destroy-method="close">  
  4.     <property name="driverClass">  
  5.         <value>${jdbc.driverClassName}</value>  
  6.     </property>                 
  7.     <property name="jdbcUrl">  
  8.         <value>${jdbc.url}</value>  
  9.     </property>     
  10.     <property name="user">  
  11.         <value>${jdbc.username}</value>  
  12.     </property>  
  13.     <property name="password">  
  14.         <value>${jdbc.password}</value>  
  15.     </property>  
  16.                 </bean>  

 

 

 参考资料:

Spring配置密码加密
http://tech.it168.com/oldarticle/2007-03-07/200703071252520_3.shtml
http://blog.csdn.net/dyyaries/article/details/7399414

本文转载自:http://zilongsky-gmail-com.iteye.com/blog/2032001

weiliu007
粉丝 16
博文 171
码字总数 84810
作品 0
深圳
程序员
私信 提问
struts2+spring实现简单用户登录注册

在前面demo的基础上再做一个涉及数据库访问,分层结构的简单用户登录注册例子,步骤如下: 1.新建user表,sql语句如下 DROP TABLE IF EXISTS ;CREATE TABLE ( int(11) NOT NULL auto_increme...

赵世传
2011/06/15
10.2K
2
使用Jasypt对数据库配置文件进行加密

在Spring配置文件中常使用占位符(placeholder )来加载资源文件,常常一些资源文件都是已明文形式存放的,比如jdbc配置信息等,从系统安全角度来说,这些信息已明文形式显示总是不好。今天接...

FuYung
2015/07/09
862
0
《Spring Security3》第四章第一部分翻译上(数据库管理信息)

第四章 凭证安全存储 到现在为止,我们已经将JBCP Pets站点做了一些用户友好性方面的升级,包括一个自定义的登录页、修改密码以及remember me功能。 在本章中,我们将会把到目前为止都在使用...

heroShane
2014/02/08
96
0
跟我学Spring Cloud(Finchley版)-21-Spring Cloud Config-配置属性加解密

前文都是将配置明文存储在Git仓库中,但在实际项目中,敏感的配置属性(例如数据库账号、密码等),都应加密存储,从而提高安全性。 Config Server为配置内容的加密与解密提供了支持。 安装J...

周立_ITMuch
02/26
35
0
Java程序员从笨鸟到菜鸟之(七十八)细谈Spring(七)spring之JDBC访问数据库及配置详解

利用spring访问数据库是我们ssh程序中必不可少的步骤,在没有hibernate之前,我们一般都用jdbc访问数据库,所以用jdbc访问数据库必不可少的要进行一些配置,spring中为我们提供了访问数据库的...

长平狐
2012/11/12
104
0

没有更多内容

加载失败,请刷新页面

加载更多

新架构、新角色:TiDB Community Upgrade!

作者:Jian Zhang 经过几年的发展,TiDB 社区已经逐渐成熟,但是随着社区的发展壮大,我们逐渐感受到了现在社区架构上的一些不足。经过一系列的思考和总结,我们决定升级和调整目前社区组织架...

TiDB
17分钟前
5
0
jquery qrcode库提示not function

jquery qrcode 这个库能用,但是必须在初始化的时候,官方给的使用方法是 引入qrcode的库文件后,在js中写以下 html <div id="qrcode"></div> js jQuery('#qrcode').qrcode({ render: ......

shikamaru
22分钟前
8
0
MySQL数据库去重的简单方案

利用 distinct 对需要处理的字段进行去重 select distinct 字段名 from 表名 利用group by select * from 表名 group by 字段名 利用having select * from 表名 group by 字段名 having 字段...

FeanLau
24分钟前
9
0
字符串转换成整数

实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该...

蔚蓝_晴天
35分钟前
8
0
Eureka客户端续约及服务端过期租约清理源码解析

在之前的文章:EurekaClient自动装配及启动流程解析中,我们提到了在构造DiscoveryClient时除了包含注册流程之外,还调度了一个心跳线程: scheduler.schedule( new Ti...

Java学习录
47分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部