springboot使用jasypt增加應用安全性

無論任何開發安全問題也是我們應該考慮的部分,除了數據接口層面的安全性,數據庫用戶名密碼等敏感信息也是需要考慮安全問題,日常開發中大多數也習慣寫明文,這樣如果代碼泄露數據庫也面臨較大威脅,本次將分享數據庫用戶名、密碼如何在springboot項目中配置和使用

1 解決方案

解決上述問題其實比較簡單,無非就是對數據庫用戶名和密碼加密,但是可用的加密算法特別多,有對稱加密的如DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等,不對稱加密RSA等,但這些算法可能過於複雜,配合springboot也有些難度. 最後經查閱資料大部分都推薦我們使用jasypt ,這個加密算法的特點是每次對同一內容加密後的結果都不一樣,但解密出來的結果卻是一樣的

2 配置

springboot也提供了相應支持,但是需要注意版本的對應關係,下面是有人整理的對應關係

https://blog.csdn.net/u013905744/article/details/86508236

pom增加下面的配置即可

 <dependency>
       <groupId>com.github.ulisesbocchio</groupId>
       <artifactId>jasypt-spring-boot-starter</artifactId>
        <version>2.1.0</version>
 </dependency>

yml文件也需要增加配置,只需配置一下jasypt的祕鑰(鹽值)即可

jasypt:
   encryptor:
     #加密祕鑰
     password: debugxwz

3 加密測試類、數據庫連接配置

import org.jasypt.util.text.BasicTextEncryptor;

public class Test {
    public static void main(String args[]){
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        //加密所需的salt(鹽)
        textEncryptor.setPassword("debugxwz");
        //要加密的數據(數據庫的用戶名或密碼)
        String username = textEncryptor.encrypt("root");
        String password = textEncryptor.encrypt("123456");
                System.out.println("username:"+username);
        System.out.println("password:"+password);
    }
}

 這裏雖然加密了用戶名和密碼,但實際開發只加密密碼也就ok了

spring:
  datasource:
    username: root
    password: ENC(9hKt5abXFE4dTsZ8XfQEjw==)
    #password: 123456
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver

這裏需要注意ENC是大寫,不能寫錯否則啓動報錯數據庫也連不上,上述配置做完之後就弄好了,啓動後日志如下:

參考資料:https://www.jianshu.com/p/838f4d2b926a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章