有時安全不得不考慮,看看新聞泄漏事件就知道了
我們在用Spring boot進行開發時,經常要配置很多外置參數ftp、數據庫連接信息、支付信息等敏感隱私信息,如下
這不太好,特別是互聯網應用,應該用加密的方式比較安全,有點類似一些應用如電商、公安、安檢平臺、滾動式大屏中獎信息等顯示身份證號和手機號都是前幾位4109128*********和158*******。
那就把圖中的明文改造下
1. 引入加密包,可選,要是自己實現加解密算法,就不需要引入第三方加解密庫
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
2. 加密敏感內容,然後填充配置文件
加密代碼:
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword("company");
String name = textEncryptor.encrypt("root");
String password = textEncryptor.encrypt("cstorfs");
System.out.println("數據庫用戶名加密後:"+name);
System.out.println("數據庫密碼加密後:"+password);
輸出加密後的效果
把這兩個值對應的填充到數據庫用戶名和密碼
3. 編寫配置類
就是Spring裏的標有@Configuration註解的類,然後解密配置文件裏的數據庫用戶名和密碼(就是上圖中的敏感屬性字段)
4. 編寫測試案例
只寫核心代碼
// 我使用的最新版Springboot2.3.0(放棄1版本)啓動後,不放心的話可以測試數據庫是否連接正常
UserMapper userMapper = applicationContext.getBean(UserMapper.class);
Example example = new Example(User.class);
example.createCriteria().andEqualTo("username", "dongguangming");
List<User> userList = userMapper.selectByExample(example);
if (userList.size() > 0) {
User user = userList.get(0);
logger.info("數據庫連接正常,從用戶表取用戶名是donggguangming的數據,用戶:" + user);
}
輸出效果:
ok,就是這效果!!!
注意,加解密算法沒有強制要求,可以自己寫,敏感信息(ftp、email、數據庫連接信息、支付支付寶微信等)也可以接着加,用的時候把它解密出現就行