Properties使用程序传递方式传递参数
使用场景:在真实的开发环境中,数据库的用户密码是对开发人员和其他人员保密的。运维人员为了保密,一般都需要把用户和密码经过加密成为密文后,配置到properties文件中。对于开发人员和其他人员而言,就不知道真是的用户密码了。
现:使用了Base64Util工具类进行解密,那么我们在创建 SqlSessionFactory前,就需要把用户名和密码解密,然后把解密后的字符串重置到properties属性中。如下:
package com.itlearn.test; import com.itlearn.dao.IUserDao; import com.itlearn.domain.User; import com.itlearn.utils.Base64Util; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.InputStream; import java.util.List; import java.util.Properties; public class MybatisTest { @Test public void mybatis_Properties() throws Exception{ String resource = "applicationConfig.xml"; InputStream inputStream = null; InputStream in = Resources.getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(in); //获得加密的数据 String username = properties.getProperty("jdbc.username"); String password = properties.getProperty("jdbc.password"); String url = properties.getProperty("jdbc.url"); String driver = properties.getProperty("jdbc.driver"); //解密后重新设定会properties properties.put("jdbc.username", Base64Util.deCoded(username)); properties.put("jdbc.password", Base64Util.deCoded(password)); properties.put("jdbc.url", Base64Util.deCoded(url)); properties.put("jdbc.driver", Base64Util.deCoded(driver)); InputStream stream = Resources.getResourceAsStream(resource); //使用SqlSessionFactoryBuilder().build(stream,properties)创建sqlSessionFactory对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream,properties); SqlSession session = factory.openSession(); IUserDao dao = session.getMapper(IUserDao.class); List<User> users = dao.findAll(); for (User user : users) { System.out.println(user); } session.close(); stream.close(); in.close(); }
对应的properties文件配置如下:
jdbc.driver=Y29tLm15c3FsLmpkYmMuRHJpdmVy jdbc.username=cm9vdA== jdbc.password=cm9vdA== jdbc.url=amRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2L215YmF0aXNkYg==
使用的Base64Util工具类如下:
package com.itlearn.utils; import java.util.Base64; public class Base64Util { /** * 该方法对字符串进行加密 * @param str:要进行加密的字符串 * @return :返回加密和的字符串 */ public static String enCode(String str){ byte[] bytes = str.getBytes(); return Base64.getEncoder().encodeToString(bytes); } /** * 该方法对字符串进行解密 * @param encode:经过加密后的字符串,即要解密的字符串 * @return :返回解密后的字符串 */ public static String deCoded(String encode){ byte[] decode = Base64.getDecoder().decode(encode); String decodeStr = new String(decode); return decodeStr; } }