1、第一步在自己的项目中写一个简单加密解密算法类,在这里我选择的使用DES加密,类的主要内容如下:/*** <描述>* @author <姓名>* @date 2014-10-8 下午3:24:14* DESUtils*/package com.cyl.util;import java.security.Key;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/*** DES加密算法工具类** @author RyanCai* @date 2014-10-8 下午3:24:14*/public class DESUtils { private static Key key; private static String KEY_STR = "myKeyRyanCai";// 密钥 private static String CHARSETNAME = "UTF-8";// 编码 private static String ALGORITHM = "DES";// 加密类型 static { try { KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM); generator.init(new SecureRandom(KEY_STR.getBytes())); key = generator.generateKey(); generator = null; } catch (Exception e) { throw new RuntimeException(e); } } /** * 对str进行DES加密 * * @param str * @return */ public static String getEncryptString(String str) { BASE64Encoder base64encoder = new BASE64Encoder(); try { byte[] bytes = str.getBytes(CHARSETNAME); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] doFinal = cipher.doFinal(bytes); return base64encoder.encode(doFinal); } catch (Exception e) { throw new RuntimeException(e); } } /** * 对str进行DES解密 * * @param str * @return */ public static String getDecryptString(String str) { BASE64Decoder base64decoder = new BASE64Decoder(); try { byte[] bytes = base64decoder.decodeBuffer(str); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, key); byte[] doFinal = cipher.doFinal(bytes); return new String(doFinal, CHARSETNAME); } catch (Exception e) { throw new RuntimeException(e); } } public static void main(String[] args) { String cod = getEncryptString("123456"); System.out.println(cod); }}
2、再使用加密类将自己jdbc.properties中重要的文件进行加密,这样jdbc.properties文件中显示的就是加密信息,如下图
3、前面准备好了之后就需要修改mybatis中初始化SqlSessionFactory的代码,这氇筐塘瓠里我只是写了一个简单的例子来说明,代码如下://用静态语句块来璜模惜割完成SqlSessionFactory的创建 static { try { //第一种方式 Reader reader=Resources.getResourceAsReader("mybatis.xml"); Properties ppt=Resources.getResourceAsProperties("jdbc.properties"); String username=ppt.getProperty("username"); String password=ppt.getProperty("password"); System.out.println("原密文="+username+"/"+password); DESUtils des=new DESUtils(); System.out.println("解密后="+des.getDecryptString(username)+"/"+des.getDecryptString(password)); ppt.setProperty("username", des.getDecryptString(username)); ppt.setProperty("password", des.getDecryptString(password)); ssf = new SqlSessionFactoryBuilder().build(reader,ppt); } catch (Exception e) { e.printStackTrace(); } }
4、这里需要说明的是new SqlSessionFactoryBuilder().build(reader,ppt);这个方法,mybatis中reader也会加载mybatis的配置文件,但是后面设置进来的Properties ppt这个属性类会将原配置文件中的某些属性用新值替换掉。所以还是会起到一个加密的作用。执行测试后,打印输出如下: