mybatis加密數據庫信息

1.配置MyBatisConfig.xml

<environments default="development"><!--        默認--><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username"  value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>

2.配置db.properties文件

單個文件配置

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://121.0.0.1:3306/stu
username=root
password=wHJ4MpJeWJndDqRhe/Fc4Q==

多個配置

development.driver=com.mysql.cj.jdbc.Driver
development.url=jdbc:mysql://121.0.0.1:3306/stu
development.username=root
development.password=wHJ4MpJeWJndDqRhe/Fc4Q==development1.driver=com.mysql.cj.jdbc.Driver
development1.url=jjdbc:mysql://121.0.0.1:3306/stu
development1.username=root
development1.password=wHJ4MpJeWJndDqRhe/Fc4Q==development2.driver=com.mysql.cj.jdbc.Driver
development2.url=jdbc:mysql://121.0.0.1:3306/stu
development2.username=root
development2.password=wHJ4MpJeWJndDqRhe/Fc4Q==

3.獲取session

單個文件配置

public static SqlSession openSession(String resource) {SqlSessionFactory sqlSessionFactory = null;try {InputStream inputStream = Resources.getResourceAsStream("xml");Properties properties = Resources.getResourceAsProperties("properties");properties.setProperty("password", AESUtil.decrypt(properties.get("password")));sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, properties);} catch (Exception e) {e.printStackTrace();log.error("默認數據庫連接異常!!!");}return sqlSessionFactory.openSession();}

多個配置

 public static Map<String, SqlSession> openSessionOther(String resource){Map<String, SqlSession> sessionMap = new HashMap<>();try {InputStream inputStream = Resources.getResourceAsStream(resource);Map<String, Properties> map = parseProperties(resource);for (String key : map.keySet()) {Properties properties =map.get(key);properties.setProperty("password", AESUtil.decrypt(properties.get("password")));SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(MYBATIS_CFG), properties);sessionMap.put(key, factory.openSession());}} catch (Exception e) {e.printStackTrace();log.error("其他數據庫連接異常!!!");}return sessionMap;}public static Map<String, Properties> parseProperties(String resource) throws Exception{Map<String, Properties> map = new HashMap<>();Properties properties = Resources.getResourceAsProperties(resource);for (String key : properties.stringPropertyNames()) {String[] dataName = key.split("\\.");if (dataName.length == 2) {if(StringUtils.isNull(map.get(dataName[0]))) {map.put(dataName[0], new Properties());}}}for (Map.Entry<Object, Object> entry : properties.entrySet()) {System.out.println(entry.getKey() + "=" + entry.getValue());String[] dataName = String.valueOf(entry.getKey()).split("\\.");if (dataName.length == 2) {Properties p = map.get(dataName[0]);if (StringUtils.isNotNull(p)) {p.setProperty(dataName[1],String.valueOf(entry.getValue()));}}}return map;}

數據庫加密文件?AES加密方式

package utils;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;/*** @Description: 加密AES* @Author zhou* @Date 2024/5/29 - 14:38*/
public class AESUtil {public static final String sKey = "111;AAAA1234++==";/*** 加密* @param crypt 輸入密碼* @return 返回加密數據*/public static String encrypt(Object crypt){String sSrc = String.valueOf(crypt);byte[] raw = sKey.getBytes(StandardCharsets.UTF_8);SecretKeySpec sKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = null;//"算法/模式/補碼方式"byte[] encrypted = new byte[0];try {cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, sKeySpec);encrypted = cipher.doFinal(sSrc.getBytes(StandardCharsets.UTF_8));} catch (Exception e) {e.printStackTrace();}return new BASE64Encoder().encode(encrypted);//此處使用BASE64做轉碼功能,同時能起到2次加密的作用。}/*** 解密* @param crypt 需要解密的字符串* @return 解密后的數據*/public static String decrypt(Object crypt){String sSrc = String.valueOf(crypt);// 判斷Key是否正確byte[] raw = sKey.getBytes(StandardCharsets.UTF_8);SecretKeySpec sKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = null;//"算法/模式/補碼方式"byte[] original = new byte[0];try {cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, sKeySpec);byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密original = cipher.doFinal(encrypted1);} catch (Exception e) {e.printStackTrace();}return new String(original,StandardCharsets.UTF_8);}public static void main(String[] args) {// 需要加密的字串String cSrc = "123456";// 加密String enString = encrypt(cSrc);System.out.println("加密后的字串是:" + enString);// 解密String DeString = decrypt(enString);System.out.println("解密后的字串是:" + DeString);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19262.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

朗讀亭主要作用有哪些?

朗讀亭的主要作用有以下幾個方面&#xff1a; 1. 提供朗讀服務&#xff1a;朗讀亭是一個專門的場所&#xff0c;提供給人們朗讀的環境和場地。人們可以在朗讀亭中選擇自己喜歡的書籍或文章&#xff0c;并通過朗讀將其表達出來。這樣可以幫助人們提高朗讀能力&#xff0c;增強自…

2024 angstromCTF re 部分wp

Guess the Flag 附件拖入ida 比較簡單&#xff0c;就一個異或 switcher 附件拖入ida 明文flag Polyomino 附件拖入ida 需要輸入九個數&#xff0c;然后進入處理和判斷&#xff0c;如果滿足條件則進入輸出flag部分&#xff0c;flag和輸入有關&#xff0c;所以要理解需要滿足什么…

【408真題】2009-27

“接”是針對題目進行必要的分析&#xff0c;比較簡略&#xff1b; “化”是對題目中所涉及到的知識點進行詳細解釋&#xff1b; “發”是對此題型的解題套路總結&#xff0c;并結合歷年真題或者典型例題進行運用。 涉及到的知識全部來源于王道各科教材&#xff08;2025版&…

利用C++與Python調用千帆免費大模型,構建個性化AI對話系統

千帆大模型已于2024年4月25日正式免費&#xff0c;調用這個免費的模型以實現自己的AI對話功能&#xff0c;遵循以下步驟&#xff1a; 了解千帆大模型&#xff1a; 千帆大模型是百度智能云推出的一個平臺&#xff0c;提供了一系列AI能力和工具&#xff0c;用于快速開發和應用A…

【以太網端口浪涌靜電防護設計電路】

以太網端口浪涌靜電防護設計電路 注&#xff1a;資料來自 深圳市浪拓電子技術有限公司 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖

python如何安裝tar.gz

首先我們到官網下載tar.gz。 然后解壓我們下載的pip-9.0.1文件&#xff0c;我的解壓后放在d&#xff1a;/p下 運行cmd&#xff0c;輸入cd d:\p&#xff0c;按回車鍵&#xff0c;隨后再次輸入d: 在d:\p>的光標處輸入pip-9.0.1\setup.py install&#xff0c;然后按回車鍵。 最…

水電收費遠程抄表

1.前言&#xff1a;從傳統到現代的改變 水電收費遠程抄表&#xff0c;是科學技術在公共服務領域的一次重要運用&#xff0c;它改變了過去人力上門服務抄表的傳統模式&#xff0c;提高了高效率&#xff0c;降低了偏差&#xff0c;為群眾與企業帶來了極大的便利。這種系統運用智…

【保姆級介紹下Foxmail 郵箱】

&#x1f308;個人主頁: 程序員不想敲代碼啊 &#x1f3c6;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f44d;點贊?評論?收藏 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共…

LVM、磁盤配額

LVM與磁盤配額 一、LVM LVM(邏輯卷管理)&#xff1a;是Linux系統下對硬盤分區的管理機制。 LVM機制適合于管理管理大存儲設備。可以動態對硬盤進行擴容。 邏輯上的磁盤&#xff0c;概念上的磁盤&#xff0c;文件系統創建之后不考慮底層的物理磁盤。 若干個磁盤分區或者物理…

LORA微調,讓大模型更平易近人

技術背景 最近和大模型一起爆火的&#xff0c;還有大模型的微調方法。 這類方法只用很少的數據&#xff0c;就能讓大模型在原本表現沒那么好的下游任務中“脫穎而出”&#xff0c;成為這個任務的專家。 而其中最火的大模型微調方法&#xff0c;又要屬LoRA。 增加數據量和模…

【數據結構與算法 | 鏈表篇】力扣876

1. 力扣876 : 鏈表的中間節點 (1). 題 給你單鏈表的頭結點 head &#xff0c;請你找出并返回鏈表的中間結點。 如果有兩個中間結點&#xff0c;則返回第二個中間結點。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5] 輸出&#xff1a;[3,4,5] 解釋&#xff1a;鏈表…

技術架構設計指南:從需求到實現

技術架構是軟件系統的骨架&#xff0c;它決定了系統的性能、可靠性、擴展性等關鍵特性。本文將介紹技術架構設計的一般步驟和方法。 第一步&#xff1a;需求分析 在設計技術架構之前&#xff0c;首先要對系統需求進行全面深入的分析。這包括功能需求、非功能需求&#xff08;如…

java使用jdbcTemplatep批量插入數據

JdbcTemplate 是 Spring 框架中提供的一個簡化 JDBC 操作的工具類&#xff0c;它封裝了 JDBC 的核心功能&#xff0c;使得開發者能夠更方便、簡潔地進行數據庫操作。 下面是一個使用 JdbcTemplate 進行批量插入的示例&#xff1a; import org.springframework.jdbc.core.Batch…

理解OAuth:服務間的授權機制

理解OAuth:服務間的授權機制 好的,讓我來教你一下關于這個奇怪的東西。 在不同的項目中,認證有很多不同的方式。但在我們深入探討它的使用方式之前,讓我們先來看看它最初的用途。 首先,我們可以從名稱中得到一些線索。“auth”這個詞與什么有關呢?問題是,這里的“aut…

開抖店必須要辦理營業執照嗎?不用營業執照開店的個人店能用嗎?

大家好&#xff0c;我是電商花花。 可能大家都發現了&#xff0c;抖音小店個人店不用營業執照&#xff0c;只憑借身份證就能開店。 但是這個個人店花花并不建議大家去開&#xff0c;雖然說用用身份證也能開店&#xff0c;有效的幫我們減少了開店的成本&#xff0c;但是個人店…

QT基礎初學

目錄 1.什么是QT 2.環境搭建 QT SDK的下載 QT的使用 QT構建項目 快捷指令 QT的簡單編寫 對象樹 編碼問題 組件 初識信號槽 窗口的釋放 窗口坐標體系 1.什么是QT QT 是一個跨平臺的 C 圖形用戶界面庫&#xff0c;支持多個系統&#xff0c;用于開發具有圖形界面的應…

比較kube-proxy模式:iptables還是IPVS?

kube-proxy是任何 Kubernetes 部署中的關鍵組件。它的作用是將流向服務&#xff08;通過集群 IP 和節點端口&#xff09;的流量負載均衡到正確的后端pod。kube-proxy可以運行在三種模式之一&#xff0c;每種模式都使用不同的數據平面技術來實現&#xff1a;userspace、iptables…

QT::QNetworkReply類readAll()讀取不到數據的可能原因

程序中&#xff0c;當發送請求時&#xff0c;并沒有加鎖&#xff0c;而是在響應函數中加了鎖&#xff0c;導致可能某個請求的finished信號影響到其他請求響應數據的讀取 connect(reply,&QNetworkReply::finished,this,&Display::replyFinished);參考這篇文章&#xff…

[LLM]從GPT-4o原理到下一代人機交互技術

一 定義 背景&#xff1a;在推出GPT-4o之前&#xff0c;使用語音模式與ChatGPT交流的延遲較長&#xff0c;無法直接觀察語調、多個說話者或背景噪音&#xff0c;且無法輸出笑聲、歌唱或表達情感。 GPT-4o作為OpenAI推出的一款多模態大型語言模型&#xff0c;代表了這一交互技…

聽說京東618裁員?所以日常準備很重要呀

文末有最少必要的面試題&#xff0c;還準備了離線 PDF 版本。 京東也要向市場輸送人才了? 這幾天看到技術群里不少朋友在討論京東裁員相關的信息。 我去看了下京東近期的操作&#xff0c;京東內部考勤調整和午休時間縮短&#xff0c;以及強化打卡機制等管理調整&#xff1b;有…