MyBatis 配置文件 用户密码加密存储
生活随笔
收集整理的這篇文章主要介紹了
MyBatis 配置文件 用户密码加密存储
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 創建db.properties
- 2. 配置mybatis-config.xml
- 3. 加解密工具類
- 4. 加解密依賴
- 5. 創建SqlSessionFactoryUtil類
- 6. db.properties加密后
- 7. 常量類
實現原理:
在獲取SqlSessionFactory之前,對獲取的配置信息做解密操作
1. 創建db.properties
properties配置文件
一般是使用properties保存配置文件內容,然后在mybatis配置文件中進行讀取
在resource文件下新建db.properties文件
2. 配置mybatis-config.xml
配置mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!--引入外部properties文件 --><properties resource="com/gblfy/conf/db.properties"></properties><settings><!-- 打印查詢語句 --><setting name="logImpl" value="STDOUT_LOGGING" /></settings><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClass}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><mapper resource="com/gblfy/mapper/mapping/UserMapper.xml"/></mappers></configuration>3. 加解密工具類
數據庫密碼加密
生產環境的數據庫密碼都為加密密碼,需要在使用的時候,把加密密碼解密成為明文
先創建數據庫密碼類
4. 加解密依賴
<!--SHA256Hex加密--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.13</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.56</version></dependency>5. 創建SqlSessionFactoryUtil類
package com.gblfy.util;import com.gblfy.consts.BaseConst; 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 java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.Properties;/*** @author gblfy* 構建SqlSessionFactory* 由于數據庫連接是寶貴的,需要對數據庫連接統一管理,所以使用單例進行管理* 這里的單利使用的雙重鎖* SqlSessionFactory為線程不安全類型需要加鎖,確保同一時刻,只有一個線程可以使用該對象*/ public class SqlSessionFactoryUtil {/*** SqlSessionFactory對象*/private static SqlSessionFactory sqlSessionFactory = null;/*** 類線程鎖*/private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;/*** 單例*/private SqlSessionFactoryUtil() {}/*** @return SqlSessionFactory* 初始化SqlSessionFactory對象*/public static SqlSessionFactory initSqlSessionFactory() {// 獲得輸入流InputStream cfgStream = null;// 閱讀流Reader cfgReader = null;InputStream proStream = null;Reader proReader = null;// 持久化屬性集Properties properties = null;try {// 配置文件流 我這里配置文件做了特殊處理cfgStream = Resources.getResourceAsStream(BaseConst.MYBATIS_CONF);#配置文件在resource目錄下面采用這種方式# cfgStream = Resources.getResourceAsStream("mybatis-config.xml");// 獲得閱讀流cfgReader = new InputStreamReader(cfgStream);// 讀入屬性文件 我這里配置文件做了特殊處理proStream = Resources.getResourceAsStream(BaseConst.MYBATIS_DB_CONF);#配置文件在resource目錄下面采用這種方式#proStream = Resources.getResourceAsStream("db.properties");proReader = new InputStreamReader(proStream);// 持久化屬性集properties = new Properties();// 流裝載進入屬性集合properties.load(proReader);// 獲取當前系統ENVString key = "ASDF692EB704D3FCDCEAD9F55FE97EGB"; // String key = System.getenv("DB_ENCRYPT_KEY");// 進行解密String encryptPwd = properties.getProperty("jdbc.password");properties.setProperty("jdbc.password", AES256Utils.decrypt(encryptPwd, key)); // properties.setProperty("password", Decode.decryptDecode(properties.getProperty("jdbc.password"), key));} catch (Exception e) {e.printStackTrace();}if (sqlSessionFactory == null) {synchronized (CLASS_LOCK) {sqlSessionFactory = new SqlSessionFactoryBuilder().build(cfgReader, properties);}}return sqlSessionFactory;}/*** 打開SqlSession** @return SqlSession*/public static SqlSession getSqlSession() {// 判空處理if (sqlSessionFactory == null) {initSqlSessionFactory();}return sqlSessionFactory.openSession();}// /** // * 獲取SqlSession // * // * @return // * @throws IOException // */ // public static SqlSession getSqlSession() throws IOException { // //mybatis的配置文件 // String resource = BaseConst.MYBATIS_CONF; // //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件) // InputStream is = Resources.getResourceAsStream(resource); // //構建sqlSession的工廠 // SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); // return sessionFactory.openSession(); // }public static void main(String[] args) {String key = System.getenv("DB_ENCRYPT_KEY");System.out.println("獲取環境變量中的加密key: " + key);}}注:如果配置文件都在resource目錄下面,獲取文件
6. db.properties加密后
接著,再次對密碼進行加密,在讀取的時候,對閱讀流的結果集進行持久化設置
先對db.properties數據庫密碼進行加密
更改以后配置文件如下
7. 常量類
package com.gblfy.consts;public class BaseConst {public static final String MYBATIS_CONF= "com/gblfy/conf/mybatis-conf.xml";public static final String MYBATIS_DB_CONF= "com/gblfy/conf/db.properties";public static final String DB_ENCRYPT_KEY= "PBDF692EB704D3FCDCEAD9F55FE87EGB";public static final String DB_PWD_KEY= "jdbc.password"; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MyBatis 配置文件 用户密码加密存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7 安装Go环境
- 下一篇: 精讲23种设计模式-策略模式~聚合短信服