1,准备获取配置文件信息类,以下是jdbc文件有2个数据源的情况下
public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
throws BeansException {
try {
String usernameW = props.getProperty("usernameW");
String usernameR = props.getProperty("usernameR");
if (usernameW != null) {
props.setProperty("usernameW", SecUtil.decrypt(usernameW));
}
if (usernameR != null) {
props.setProperty("usernameR", SecUtil.decrypt(usernameR));
}
String passwordW = props.getProperty("passwordW");
String passwordR = props.getProperty("passwordW");
if (passwordW != null) {
props.setProperty("passwordW", SecUtil.decrypt(passwordW));
}
if (passwordR != null) {
props.setProperty("passwordR", SecUtil.decrypt(passwordR));
}
String urlW = props.getProperty("urlW");
String urlR = props.getProperty("urlR");
if (urlW != null) {
props.setProperty("urlW", SecUtil.decrypt(urlW));
}
if (urlR != null) {
props.setProperty("urlR", SecUtil.decrypt(urlR));
}
String driverClassNameW = props.getProperty("driverW");
String driverClassNameR = props.getProperty("driverR");
if(driverClassNameW != null){
props.setProperty("driverW", SecUtil.decrypt(driverClassNameW));
}
if(driverClassNameR != null){
props.setProperty("driverR", SecUtil.decrypt(driverClassNameR));
}
super.processProperties(beanFactory, props);
} catch (Exception e) {
e.printStackTrace();
throw new BeanInitializationException(e.getMessage());
}
}
2,准备加密类
private static final Logger logger = Logger.getLogger(SecUtil.class.getName());
/**
* 自定义 KEY
*/
private static byte[] keybytes = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x50,
0x37, 0x38, 0x39, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 };
public static void main(String[] args) {
BufferedReader reader;
try {
String st = "";
do{
if("".equals(st)) {
System.out.println("AES加密与解密操作:");
System.out.println("\"E\":加密 \t\"D\":解密\t\t\"Q\":退出");
System.out.println("请输入操作代码:");
}
reader = new BufferedReader(new InputStreamReader(System.in));
st = reader.readLine();
if("E".equalsIgnoreCase(st)) {
System.out.println("请输入待加密字符串:");
st = reader.readLine();
if(!"".equals(st.trim())) {
System.out.println("加密前:" + st.trim());
System.out.println("加密后:" + encrypt(st.trim()) + "\n\n");
}
st = "";
}else if("D".equalsIgnoreCase(st)) {
System.out.println("请输入待解密字符串:");
st = reader.readLine();
if(!"".equals(st.trim())) {
System.out.println("解密前:" + st.trim());
System.out.println("解密后:" + decrypt(st.trim()) + "\n\n");
}
st = "";
}
} while(!st.equalsIgnoreCase("Q"));
} catch (Exception e) {
logger.error(e);
}
}
/**
* @Title: encrypt
* @author yunlin.liu
* @Description: 加密
* @param @param value
* @param @return 设定文件
* @return String 返回类型
* @throws
*/
public static String encrypt(String value) {
String s = null;
int mode = Cipher.ENCRYPT_MODE;
try {
Cipher cipher = initCipher(mode);
byte[] outBytes = cipher.doFinal(value.getBytes());
s = String.valueOf(Hex.encodeHex(outBytes));
} catch (Exception e) {
logger.error(e);
}
return s;
}
/**
* @Title: decrypt
* @author yunlin.liu
* @Description: 解密
* @param @param value
* @param @return 设定文件
* @return String 返回类型
* @throws
*/
public static String decrypt(String value) {
String s = null;
int mode = Cipher.DECRYPT_MODE;
try {
Cipher cipher = initCipher(mode);
byte[] outBytes = cipher
.doFinal(Hex.decodeHex(value.toCharArray()));
s = new String(outBytes);
} catch (Exception e) {
logger.error(e);
}
return s;
}
/**
* @Title: initCipher
* @author yunlin.liu
* @Description: 初始化密码
* @param @param mode
* @param @return
* @param @throws NoSuchAlgorithmException
* @param @throws NoSuchPaddingException
* @param @throws InvalidKeyException 设定文件
* @return Cipher 返回类型
* @throws
*/
private static Cipher initCipher(int mode) throws NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
Key key = new SecretKeySpec(keybytes, "AES");
cipher.init(mode, key);
return cipher;
}
3,spring配置文件
<bean id="pftpServicePlaceholderConfig"
class="com.wtjr.common.util.EncryptablePropertyPlaceholderConfigurer">
<property name="order" value="1"></property>
<property name="ignoreUnresolvablePlaceholders" value="true"></property>
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>