Springboot簡單功能示例-6 使用加密數據源並配置日誌

来源:https://www.cnblogs.com/xiuligong-net/archive/2023/09/26/17731352.html
-Advertisement-
Play Games

0. 數據說明 本項目所用數據集包含了一個家庭6個月的用電數據,收集於2007年1月至2007年6月。 這些數據包括有功功率、無功功率、電壓、電流強度、分項計量1(廚房)、分項計量2(洗衣房)和分項計量3(電熱水器和空調)等信息。該數據集共有260,640個測量值,可以為瞭解家庭用電情況提供重要的見 ...


springboot-sample

介紹

springboot簡單示例 跳轉到發行版 查看發行版說明

軟體架構(當前發行版使用)

  1. springboot
  2. hutool-all 非常好的常用java工具庫 官網 maven
  3. bcprov-jdk18on 一些加密演算法的實現 官網 maven
  4. h2 純java的資料庫,支持記憶體、文件、網路資料庫 官網 maven

安裝教程

git clone --branch 6.使用加密數據源並配置日誌 [email protected]:simen_net/springboot-sample.git
 

功能說明

  1. 配置logback
  2. 配置了數據源,對資料庫賬號密碼進行加密
  3. 增加了系統啟動配置

發行版說明

  1. 完成基本WEB服務 跳轉到發行版
  2. 完成了KEY初始化功能和全局錯誤處理 跳轉到發行版
  3. 完成了基本登錄驗證 跳轉到發行版
  4. 完成了自定義加密進行登錄驗證 跳轉到發行版
  5. 完成了使用JWT進行授權認證 跳轉到發行版
  6. 完成了使用加密數據源並配置日誌 跳轉到發行版 查看發行版說明

使用加密數據源並配置日誌

配置logback

配置logback.xml,規範日誌輸出格式,配置info和error日誌輸出為文件(保存30天)

配置數據源

  1. application-dev.yaml中配置數據源

    # spring基本配置
    spring:
      # 資料庫連接池配置
      datasource:
        driver-class-name: org.h2.Driver
        # 使用H2資料庫,此處不配置url,在com.strong.config.DataSourceConfig中配置本地目錄資料庫
        # url: jdbc:h2:mem:simen
        # url: jdbc:h2:./simen
        username: BKkV4rITSiMsMBEZtIoNeLivkfJYjRNPJjX0EJ21hxMQ/oflQL5Qk3u8B7RhqfD+KIkOkPHDSNx3c67q78lTwLqTOCuYkltDI2R9kES3d4yXb+bFxtXAm9qs7m+EMLX85MRX
        password: BDNZEUz2C0XDhU0y3OtKUCVkoLKVlTo5EXEIhBtKHwAGT5heBYyKkkd0I5J8A1PBRGkczhA86MqI2SQTXXuJ+b+ki4jqhlNhELG+ts6T/VZugd6pKs5bbqcSDWqT5s0XEpbgJ1Ah7aE56AbazjVaBX5U3FsEU/KhWHQ3qx0KoN47
        # 連接池類型
        type: com.alibaba.druid.pool.DruidDataSource
        # 參數配置
        druid:
          # 初始化時建立物理連接的個數
          initialSize: 5
          # 最小連接池數量
          minIdle: 20
          # 最大連接池數量
          maxActive: 50
          # 獲取連接時最大等待時間,單位:毫秒
          maxWait: 60000
    
          # 是否緩存PSCache,PSCache對支持游標的資料庫性能提升巨大
          poolPreparedStatements: true
          # 啟用PSCache,必須配置大於0
          maxPoolPreparedStatementPerConnectionSize: 20
    
          # 用來檢測連接是否有效的sql
          validationQuery: select 1
          # 檢測連接是否有效的超時時間,單位:秒
          validationQueryTimeout: 5
          # 申請連接時執行validationQuery檢測連接是否有效,會降低性能
          testOnBorrow: false
          # 歸還連接時執行validationQuery檢測連接是否有效,會降低性能
          testOnReturn: false
          # 申請連接的時候檢測連接是否有效
          testWhileIdle: true
    
          # 空閑時間超過minEvictableIdleTimeMillis,是否強制keepAlive
          keepAlive: false
          # 空閑時間大於等於minEvictableIdleTimeMillis則關閉物理連接,單位是毫秒
          timeBetweenEvictionRunsMillis: 60000
          # 連接保持空閑而不被驅逐的最小時間,單位毫秒
          minEvictableIdleTimeMillis: 30000
    
          # 物理連接初始化的時候執行的sql。
          connectionInitSqls: select 0
    
          # 常用的插件有:監控統計用的filter:stat、日誌用的filter:log4j、防禦sql註入的filter:wall
          filters: stat,wall,slf4j
    
          # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
          connectionProperties: |-
            druid.stat.mergeSql=false;
            druid.stat.slowSqlMillis=5000
     
  2. 增加資料庫配置DataSourceConfig,對賬號密碼進行加密,解決項目源碼提交到公共git造成賬號密碼泄露的問題。

    /**
     * 從預設參數配置數據源
     *
     * @return {@link DataSource}
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DataSource getDataSource() {
        DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
        // 如果是H2資料庫,則註入載入
        if (StrUtil.equals(org.h2.Driver.class.getName(), driverClassName)) {
            // 配置資料庫URL
            String strJdbcUrl = "jdbc:h2:tcp://localhost:9092/" +
                    StrongUtils.getStaticPath(STR_DIRECTORY_STATICS, databaseName);
            druidDataSource.setUrl(strJdbcUrl);
            log.info("成功連接H2資料庫[{}]", strJdbcUrl);
        }
        // 使用私鑰解密賬號密碼,註入數據源
        druidDataSource.setUsername(SM2_OBJ.decryptStr(username, KeyType.PrivateKey));
        druidDataSource.setPassword(SM2_OBJ.decryptStr(password, KeyType.PrivateKey));
        return druidDataSource;
    }
     
    • 使用DruidDataSource從application-dev.yaml中載入數據源配置參數DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
    • 在使用H2資料庫時,使用項目名為資料庫名,資料庫文件保存在當前項目所在目錄中的static
    • application-dev.yaml中讀取加密後的資料庫賬號密碼,使用私鑰解密後註入數據源

系統啟動配置

  1. SpringbootSampleApplication.java中配置啟動
    public static void main(String[] args) {
        // 測試加解密、簽名字元串
        SecurityUtils.testPasswordEncode();
    
        // 生成數據密碼加密後字元串
        String strDatabaseUsername = "sa";
        String strDatabasePassword = "123456";
        log.info("\n使用公鑰加密資料庫賬號密碼,需將加密字元串配置到application.yaml\n資料庫用戶名[{}] 加密後[{}]\n密碼[{}] 加密後[{}]\n",
                strDatabaseUsername, SM2_OBJ.encryptBase64(strDatabaseUsername, KeyType.PublicKey),
                strDatabasePassword, SM2_OBJ.encryptBase64(strDatabasePassword, KeyType.PublicKey)
        );
    
        // 啟動H2伺服器
        H2Utils.startH2Server();
        // 設置當前時區
        TimeZone.setDefault(TimeZone.getTimeZone(STR_TIME_ZONE_ASIA_SHANGHAI));
        // 獲取系統對象
        SpringApplication application = new SpringApplication(SpringbootSampleApplication.class);
        // 系統pid記錄文件
        String strPidFile = StrongUtils.getStaticPath(STR_FILE_APP_PID);
        // 將pid監聽信息寫入記錄文件,使用 cat /xxxx/app.id | xargs kill 停止服務
        application.addListeners(new ApplicationPidFileWriter(strPidFile));
        log.info("將pid監聽信息寫入記錄文件{}", strPidFile);
        // 啟動系統
        application.run();
    }

     


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 前兩天我的新同事告訴我一個困擾著他的問題,就是低代碼平臺中存在很多模塊,這些模塊的渲染是由模塊自身處理的,簡言之就是組件請求了自己的數據,一個兩個模塊還好,要是一次請求了幾十個模塊,就會出現請求阻塞的問題,而且模塊的請求都特別大。 ...
  • 頁面效果 具體實現 新增 1、監聽滑鼠抬起事件,通過window.getSelection()方法獲取滑鼠用戶選擇的文本範圍或游標的當前位置。 2、通過 選中的文字長度是否大於0或window.getSelection().isCollapsed (返回一個布爾值用於描述選區的起始點和終止點是否位於 ...
  • 標簽組件的效果如下 組件作用 這是一個div,包含了兩個文本框,後面是添加和刪除按鈕 添加按鈕複製出新的div,除了文本框沒有內容,其它都上面一樣 刪除按鈕將當前行div刪除 組件實現 <template> <div> <template v-for="(item,index) in tags"> ...
  • 用到的技術 父組件向子組件的傳值 類型檢查和預設值:您可以為props指定類型檢查和預設值。這可以確保傳遞給子組件的數據符合期望的類型,以及在沒有傳遞數據時具有合理的預設值。例如: props: { message: { type: String, default: 'Default Message ...
  • 首先,先說說我要實現的內容:如下圖,點“新增”會添加一個灰框內容,form表單是一個數組,一個灰框為一個對象,各對象保存時各自校驗自己表單里的內容,互不幹擾! 上頁面代碼(看部分代碼就懂了): 1 <div v-for="(item,index) in formList" :key="index"> ...
  • 我們是袋鼠雲數棧 UED 團隊,致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 本文作者:空山 什麼是沙箱 沙箱即 SandBox,它是一種安全機制,用於嚴格控制訪問資源。通過在程式中創建一個獨立的運行環境,把一些來源不可信、具有破壞力或者又是無法 ...
  • 最近在做性能優化,具體優化手段,網上鋪天蓋地,這裡就不重覆了。性能優化可分為以下幾個維度:代碼層面、構建層面、網路層面。本文主要是從代碼層面探索前端性能,主要分為以下 4 個小節。使用 CSS 替代 JS、深度剖析 JS、前端演算法、電腦底層 ...
  • 集合概述 為了保存數量不確定的數據,以及保存具有映射關係的數據,Java 提供了集合類。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。所有的集合都位於java.util包下 Java 的集合類主要由兩個介面派生而出:Collection和Map,Collection和Map 是 Jav ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...