java實現工程配置文件敏感字段加解密


以下引自他人博客:

1. 需求背景
我們在開發應用時,需要連接數據庫,一般把數據庫信息放在一個屬性配置文件中,比如***.properties,具體的內容

#mysql的配置文件
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=123456
里面用明文的方式存儲着數據庫的敏感信息用戶名username和密碼password,這是不好的行為,容易產生安全問題。那我們如何實現加密存儲呢?

2. 實現原理
實現原理其實很簡單,配置文件存儲加密后的用戶名和密碼,重寫Druid數據源的兩個方法setUsername(String username)和setPassword(String password)對信息解密。

3. 實現方式
3.1 寫加密工具
首先得有一個加密工具,具有加解密功能,這里為了方便直接使用Druid中的工具類com.alibaba.druid.filter.config.ConfigTools。使用其中的encrypt(String plainText)方法和decrypt(String cipherText)方法采用默認的公私玥加解密。

3.2 加密配置文件
#MySql數據庫配置
connection.url=jdbc:mysql://127.0.0.1:3306/test
connection.username=*************加密后的用戶名********************
connection.password=*************加密后的密碼**********************
3.3 創建自己的數據源
新建類SecurityDateSource繼承數據源DruidDataSource並重寫其中設置用戶名和密碼的方法:

import com.alibaba.druid.filter.config.ConfigTools;
import com.alibaba.druid.pool.DruidDataSource;

public class SecurityDateSource extends DruidDataSource{
@Override
public void setUsername(String username) {
try {
username = ConfigTools.decrypt(username);
} catch (Exception e) {
e.printStackTrace();
}
super.setUsername(username);
}

@Override
public void setPassword(String password) {
try {
password = ConfigTools.decrypt(password);
} catch (Exception e) {
e.printStackTrace();
}
super.setPassword(password);
}

public static void main(String[] args) throws Exception{
String password = "123456";
String username = "root";
System.out.println("加密后的password = [" + ConfigTools.encrypt(password) + "]");
System.out.println("加密后的username = [" + ConfigTools.encrypt(username) + "]");
}
}


3.4 Spring文件中配置數據源(spring-context.xml)
注意將class改為自己的新建的數據源

<bean id="dataSource" class="com.wei.core.database.SecurityDateSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

巴啦啦能量~~~~

以下為自己將其做了修改封裝的加密工具,因為工程部署到客戶現場的時候,數據庫的用戶名及密碼不可能一直不變(即代碼里面寫死的root和123456),那么需要動態變換,不可能每次都去代碼里面去進行加密,然后換配置文件里面對應的參數值

所以寫一個工具,然后直接      java -jar ***.jar,  就會將加密后的參數值輸出到當前目錄的addpasswd.txt文件中,進去查看,可以自己寫shell腳本,將其參數化,自動替換到工程配置文件對應參數里面

這個提供工具類jar包,可以下載下來直接執行

 

 

下載地址:https://pan.baidu.com/s/1E_OC6VOPaOdpXYL_DB_NZA

提取碼:g8z8

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM