- Published on
Spring 数据库密码加密
- Authors
- Name
- Jason Yang
- @yangjinlong86
我们一般都会把数据库的连接信息写在properties配置文件里,只要打开了配置文件,就能直接看到数据库的用户名密码等信息,一些项目会要求不能出现明文密码,接下来,简单三步,实现配置文件里的用户名和密码加密。
一、加密解密工具类
我以Base64为例,写个简单的加密和解密工具
package org.nocoder.utils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
/**
* EncryptUtil
* Created by jason on 2017/7/18.
*/
public class EncryptUtil {
/**
* 加密
* @param value
* @return encode string value
*/
public static String encode(String value){
if(StringUtils.isNotBlank(value)){
Base64 base64 = new Base64();
return new String(base64.encode(value.getBytes()));
}
return null;
}
/**
* 解密
* @param value
* @return decode string value
*/
public static String decode(String value){
if(StringUtils.isNotBlank(value)){
Base64 base64 = new Base64();
return new String(base64.decode(value.getBytes()));
}
return null;
}
public static void main(String[] args) {
System.out.println(EncryptUtil.encode("test"));
System.out.println(EncryptUtil.decode("dGVzdA=="));
}
}
二、通过继承spring配置类并重写处理方法实现解密
package org.nocoder.security;
import org.apache.commons.lang3.StringUtils;
import org.nocoder.utils.EncryptUtil;
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 java.util.Properties;
/**
* 通过继承spring配置类并重写处理方法实现密文解密
* Created by jason on 2017/7/18.
*/
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {
try {
String username = props.getProperty("username");
if(StringUtils.isNotBlank(username)){
props.setProperty("username", EncryptUtil.decode(username));
}
String password = props.getProperty("password");
if(StringUtils.isNotBlank(password)){
props.setProperty("password",EncryptUtil.decode(password));
}
super.processProperties(beanFactory, props);
} catch (Exception e) {
e.printStackTrace();
throw new BeanInitializationException(e.getMessage());
}
}
}
三、修改配置文件
1、使用加密工具类对用户名和密码进行加密,修改properties配置文件config.properties
driver=org.postgresql.Driver
url=jdbc:postgresql://127.0.0.1:5432/freda_db
username=加密后的用户名
password=加密后的密码
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=50
#定义最大空闲
maxIdle=50
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
2、修改applicationContext.xml
,引入配置文件
<!-- 引入配置文件,这里的class就是之前写的那个Spring配置类的路径 -->
<bean id="encryptPropertyConfigurer" class="org.nocoder.security.EncryptPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
OK了,就这三步,重启服务试试看!