最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何加密配置文件里的敏感數(shù)據(jù)

 更新時間:2022年06月17日 09:28:42   作者:碼農Amg  
這篇文章主要介紹了加密配置文件里的敏感數(shù)據(jù)的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

加密配置文件里面的敏感數(shù)據(jù)

項目開發(fā)的時候,需要把數(shù)據(jù)存放到指定的數(shù)據(jù)庫中(例如MySql、Oracle等),還有會使用緩存數(shù)據(jù)庫提升性能的。

連接數(shù)據(jù)庫相關的信息一般都是存放在配置文件里面,spring boot會幫我們注入到具體的對象里面。但是如果配置文件里面相關的敏感信息是以【明文】的方式存儲,那么就會存在安全隱患

今天偶然想起是不是可以把敏感信息加密起來,然后寫到配置文件里面,結果一搜,還真的有,特此記錄一下!

通用步驟(引入相關依賴)

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

數(shù)據(jù)庫信息

redis緩存信息

修改配置文件,加入密鑰

修改前的yml配置文件

server:
  port: 9091
jasypt:
  encryptor:
    # 指定加密密碼
    password: wxzkjtvvgt@44lvvz
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: root1234
    username: root
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: 127.0.0.1
    password: iamamg

第一種做法

@Test
    void testEncrypt() {
        final String redisHostEncrypt = stringEncryptor.encrypt("127.0.0.1");
        final String redisPasswordEncrypt = stringEncryptor.encrypt("iamamg");
        final String mysqlUrl = stringEncryptor.encrypt("jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC");
        final String mysqlUserName = stringEncryptor.encrypt("root");
        final String mysqlPassword = stringEncryptor.encrypt("root1234");
        System.out.println("==================================");
        // 用這些加密的信息替換掉配置文件里面相關的配置項
        
        System.out.println("redis主機加密:" + redisHostEncrypt);
        System.out.println("redis密碼加密:" + redisPasswordEncrypt);
        System.out.println("mysql用戶名加密:" + mysqlUserName);
        System.out.println("mysql密碼加密:" + mysqlPassword);
        System.out.println("mysqlUrl加密:" + mysqlUrl);
        System.out.println("===================================");
        System.out.println("redis主機解密:" + stringEncryptor.decrypt(redisHostEncrypt));
        System.out.println("redis密碼解密:" + stringEncryptor.decrypt(redisPasswordEncrypt));
        System.out.println("mysql用戶名解密:" + stringEncryptor.decrypt(mysqlUserName));
        System.out.println("mysql密碼解密:" + stringEncryptor.decrypt(mysqlPassword));
        System.out.println("mysqlUrl解密:" + stringEncryptor.decrypt(mysqlUrl));
    }
==================================
redis主機加密:V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw
redis密碼加密:0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY
mysql用戶名加密:cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF
mysql密碼加密:/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0
mysqlUrl加密:NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb
===================================
redis主機解密:127.0.0.1
redis密碼解密:iamamg
mysql用戶名解密:root
mysql密碼解密:root1234
mysqlUrl解密:jdbc:mysql://127.0.0.1:3306/encryp?serverTimezone=UTC

修改后的yml配置文件

可能你也觀察到了,需要額外注意的一點就是,需要加密的數(shù)據(jù)項都使用了ENC()括起來了

server:
  port: 9091
jasypt:
  encryptor:
    # 加密密碼
    password: wxzkjtvvgt@44lvvz
spring:
  datasource:
    url: ENC(NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb)
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: ENC(/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0)
    username: ENC(cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF)
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: ENC(V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw)
    password: ENC(0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY)

測試是否可行

	/**
     * 測試獲取數(shù)據(jù)庫中的數(shù)據(jù)總量
     */
    @Test
    void testSelectInMysql() {
        String sql = "SELECT COUNT(1) FROM T0001_TEST";
        final Integer num = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(num);
    }
    /**
     * 測試獲取redis中指定key
     */
    @Test
    void testSelectInRedis() {
        final String name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

但是,大家且思考一下,我們當前yml配置文件里面依然存在著密鑰,這是不是很不合理?只要解讀到這個文件,密鑰還是會被知道,所以這里提供另外一種做法

第二種做法

1.首先把yml文件里面的密鑰記錄下來,然后把配置去掉(其實就是把這個配置移到運行的時候才指定)

啟動的時候加上-Djasypt.encryptor.password= 密鑰 ;這里的密鑰為 wxzkjtvvgt@44lvvz,如果密鑰錯誤,項目是啟動不成功的,通常報的錯都是數(shù)據(jù)庫連接失敗,這也挺正常的,因為如果是錯誤的密鑰,密文信息就無法解密,得到的自然是不符合的信息,所以會報錯

# 就把關于密鑰的部分移除,其他依舊不變
server:
  port: 9091
spring:
  datasource:
    url: ENC(NvHXbj9LhVamadZSyXfB/Alsg+XuICiJUKTC/dl92lDEF0gcHoIi1Fd0HOxGOEBydgnyNdyK0cnDC0vyC0k+e5AR9Cr8VYDUMdALMr+85Ar4XrPZ0ZICYAsox84fSMdb)
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: ENC(/J2IBQyk8aydeBKL6E553ffxanVE660uuNOzUrNlVMEcrejy70Sen0MKkXc7szQ0)
    username: ENC(cTPlLHJqZcchsnd0N9gZWGpFcfAFS0EwFwT0foYPXqxA9ngXfNtCUoR7rLvPfYRF)
  application:
    name: test-encrypt
  redis:
    port: 6379
    host: ENC(V5FeblAg4MRY+TEkmBlSZzgK74CTIyPPnrkcpUibYFMxbEHtmPWduLxdHpgFn3Gw)
    password: ENC(0aP2oNj2IrXA9bl6HygZQESEy82dWccigQ5Fic474y8f3pyDNxRIdA+C5SjHsKEY)

2.在IDEA里面啟動程序的方式

3.打成jar包,命令行啟動的方式

最終還是測試是否可行

此時模擬真實的三層開發(fā)

//controller代碼
    
/**
 * @Author: Amg
 * @Date: Created in 17:45 2021/04/17
 * @Description: TODO
 */
@RestController
public class TestController {
    @Autowired
    TestServiceImpl service;
    @GetMapping("/count")
    public String getCount() {
        final Integer count = service.getCount();
        if (StringUtils.isEmpty(count)) {
            return "連接數(shù)據(jù)庫出問題了";
        } else {
            return "連接數(shù)據(jù)庫成功!當前數(shù)據(jù)量為:" + count;
        }
    }
}
//service代碼
/**
 * @Author: Amg
 * @Date: Created in 17:46 2021/04/17
 * @Description: TODO
 */
@Service
public class TestServiceImpl {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public Integer getCount() {
        try {
            String sql = "SELECT COUNT(1) FROM T0001_TEST";
            return jdbcTemplate.queryForObject(sql, Integer.class);
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

莫得問題!

總結

1、引入相關依賴

2、修改配置文件,加入密鑰配置 / 啟動的時候指定密鑰

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java日常練習題,每天進步一點點(58)

    Java日常練習題,每天進步一點點(58)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • IDEA自動生成類圖和時序圖的操作指南

    IDEA自動生成類圖和時序圖的操作指南

    idea 的強大之處在于此,它包含了很多小插件,我們不需要再次下載相關插件,只需要在idea中小小的設置一下就可以了,本文我介紹了IDEA自動生成類圖和時序圖的操作指南,我用的是idea2020版本,需要的朋友可以參考下
    2024-05-05
  • Struts2實現(xiàn)多文件上傳功能

    Struts2實現(xiàn)多文件上傳功能

    這篇文章主要為大家詳細介紹了Struts2實現(xiàn)多文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • java 解決Eclipse掛掉問題的方法

    java 解決Eclipse掛掉問題的方法

    本篇文章是對在java中解決Eclipse掛掉問題的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • MyBatis不同Mapper文件引用resultMap實例代碼

    MyBatis不同Mapper文件引用resultMap實例代碼

    這篇文章主要介紹了mybatis 不同Mapper文件引用resultMap的實例代碼,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2017-07-07
  • SpringBoot的application.yml不生效問題及解決

    SpringBoot的application.yml不生效問題及解決

    這篇文章主要介紹了SpringBoot的application.yml不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 解決maven啟動Spring項目報錯的問題

    解決maven啟動Spring項目報錯的問題

    下面小編就為大家分享一篇解決maven啟動Spring項目報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • WebDriver實現(xiàn)自動化打開IE中的google網頁并實現(xiàn)搜索

    WebDriver實現(xiàn)自動化打開IE中的google網頁并實現(xiàn)搜索

    這篇文章主要介紹了WebDriver實現(xiàn)自動化打開IE中的google網頁并實現(xiàn)搜索,需要的朋友可以參考下
    2014-04-04
  • SpringBoot使用Spark過程詳解

    SpringBoot使用Spark過程詳解

    這篇文章主要介紹SpringBoot使用Spark的方法的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望能幫助大家解決問題
    2023-02-02
  • SpringBoot中讀取application.properties配置文件的方法

    SpringBoot中讀取application.properties配置文件的方法

    這篇文章主要介紹了SpringBoot中讀取application.properties配置文件的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02

最新評論

石首市| 黎平县| 丽水市| 麻栗坡县| 报价| 河西区| 文安县| 横峰县| 靖江市| 滨海县| 公安县| 奉化市| 稷山县| 正镶白旗| 扶余县| 浦东新区| 甘南县| 清河县| 正定县| 宁阳县| 京山县| 吉首市| 眉山市| 罗甸县| 安陆市| 沁水县| 阆中市| 米林县| 黑河市| 海原县| 南部县| 九台市| 泸定县| 徐水县| 米易县| 黄冈市| 德格县| 乡宁县| 枞阳县| 攀枝花市| 宝应县|