SpringBoot 配置文件/屬性ENC加密


一、配置文件

  1. 配置文件分類

    A. 按作用分類

      application:由ApplicationContext加載的,用於spring boot項目的自動化配置;

      bootstrap:由父ApplicationContext加載的,比applicaton優先加載,且boostrap里面的屬性不能被覆蓋;

    B. 按格式分類:

      .properties:數據無序,數據類型單一;

      .yml: 文件更加結構化,數據有序,數據類型多樣化,支持數組[],對象{},集合-,map等;

  2. 配置文件默認位置及執行順序

    A. 項目根目錄下的config目錄下:最先加載;

    B. 項目根目錄下:第二加載;

    C. resources目錄下的config目錄下:第三加載;

    D. resources目錄下(application.properties默認位置):最后加載;

    當然可以通過spring.config.location自定義配置文件位置,通過spring.config.lname自定義文件名。

2. 配置屬性讀取方式

  A. @ConfigurationProperties注解(適用於配置屬性較多的情況)

    首先要在main方法啟動類上加@EnableConfigurationProperties,然后在自定義bean上加@ConfigurationProperties注解。

  B. @Value注解(適用於配置屬性較少的情況)

    I. @Value(${property:defaultValue}):配置文件里對應的屬性,defaultValue為屬性為空時默認值,若屬性沒有且默認值沒有,類啟動就會報錯

    II. @Value(#{obj.property?:defaultValue}):SPEL表達式對應的內容,obj代表對象

    III. @Value的處理器StringValueResolver初始化時機是PropertySourcesPlaceholderConfigurer類postProcessBeanFactory方法中,而處理@Value屬性解析的時機是在getBean中的處理依賴resolveDependency方法中

    示例:由於redis可能部署單機或集群,所以shiro授權緩存redis,可能因配置不同而不同

  C. Environment方式

    注入Environment類,然后調用getProperty()方法獲取屬性值

  D. 自定義配置文件(適用於業務方面的參數配置)

    自定義bean上加上@Configuration和@ConfigurationProperties注解

3. 多環境配置(application-{profile}.properties)

  A. 開發環境:profile ——> dev

  B. 測試環境:profile ——> test

  C. 生產環境:profile ——> prod

  啟動方式:spring.profies.active = dev

 

二、配置信息ENC加密

  1. Maven依賴

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

  2. 配置類

package com.ruhuanxingyun.minio.config;

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @description: 配置文件屬性加解密配置類
 * @author: ruphie
 * @date: Create in 2020/12/11 21:46
 * @company: ruhuanxingyun
 */
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
}

  3. 生成加密密文

package com.ruhuanxingyun.minio;

import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ApplicationTests {

    @Autowired
    private StringEncryptor stringEncryptor;

    @Test
    void contextLoads() {
        String accessKey = stringEncryptor.encrypt("ruphie");
        String secretKey = stringEncryptor.encrypt("minio");
        System.out.println("加密后賬號:"+ accessKey);
        System.out.println("加密后密碼:"+ secretKey);
    }

}

  4. 配置密文

    A. 默認格式是ENC(密碼);

    B. 必須指定jasypt.encryptor.password參數;

    C. 秘鑰可以存放在配置文件或環境變量上;

minio:
  endpoint: http://localhost:9000
  access-key: ENC(xbtRi4G2Ax2Gk+jh7BYs2g==)
  secret-key: ENC(7vH6RnOeeZRs+zSKyqaj4A==)

jasypt:
  encryptor:
    password: 20201211

 

可參考:Spring @Value注解使用總結一Spring @Value注解使用總結二

    SpringBoot中@Value源碼解析

    SpringBoot整合Jasupt


免責聲明!

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



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