SpringBoot配置文件加密

一、SpringBoot配置文件加密自定義

SpringBoot中的application.properties或application.yml文件中可能包含敏感信息(如數據庫用戶名和密碼),為了保證安全,需要對其進行加密處理。SpringBoot提供了多種方式來實現配置文件加密,一種是自定義加密方式。

通過在application.properties或application.yml文件中配置自定義的加密方式:

encrypt:
  key: 1234567890ABCDEF
  salt: 0123456789ABCDEF

其中key是用於加密的密鑰,salt是用於混淆的鹽值。然後在使用到敏感信息的地方,將明文改為加密後的密文,例如:

spring.datasource.username=ENC(OcQy7UcFsmf7lLTc0Af2Yg==)
spring.datasource.password=ENC(nnr63c4zebYZEXqj9i+tCw==)

這裡的ENC表示使用自定義加密方式加密,使用時還需要在代碼中實現自定義的加解密工具類。

二、SpringBoot配置文件密碼加密

SpringBoot還提供了一種簡單的加密方式,可以對整個配置文件進行加密。加密方式如下:

// 加密
java -cp spring-boot.jar org.springframework.boot.loader.tools.EncryptionUtils mypassword
// 解密
java -cp spring-boot.jar org.springframework.boot.loader.tools.EncryptionUtils --decrypt ENC(fd2f7d0ece6ec4be86a29c2ac60eced6)

在application.properties或application.yml文件中配置加密後的密碼,例如:

spring.datasource.password=ENC{fd2f7d0ece6ec4be86a29c2ac60eced6}

三、SpringBoot配置文件加密解密

可以使用Jasypt庫對SpringBoot配置文件進行加密解密操作,並且可以在代碼中自定義加解密方式。具體操作步驟如下:

1、在pom.xml文件中添加依賴:

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

2、在application.properties或application.yml文件中配置加密方式:

jasypt:
  encryptor:
    password: mypassword
  decryptor:
    password: mypassword

3、在代碼中使用Jasypt加解密工具類對配置文件中的敏感信息進行加解密,例如:

@Autowired
private Environment environment;

String password = environment.getProperty("spring.datasource.password");
String decryptPassword = decryptor.decrypt(password);

四、SpringBoot接口加密

SpringBoot除了對配置文件進行加密,還可以對接口返回結果進行加密,防止信息泄露。可以結合使用Jasypt和AOP實現接口加密操作:

1、在pom.xml文件中添加依賴:

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

2、自定義註解@EncryptResult和AOP攔截器對接口返回結果進行加密操作:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EncryptResult {
}

@Aspect
@Component
public class ResultEncryptAspect {
    private final Logger logger = LoggerFactory.getLogger(ResultEncryptAspect.class);

    @Autowired
    private StringEncryptor encryptor;

    @Around("@annotation(com.example.demo.annotation.EncryptResult)")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        // 調用原始方法
        Object result = pjp.proceed();
        // 加密結果
        String json = JSON.toJSONString(result);
        StringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword("password");
        String encryptedJson = encryptor.encrypt(json);
        // 返回加密結果
        logger.info("result before encryption: {}, result after encryption: {}", json, encryptedJson);
        return encryptedJson;
    }
}

3、在需要加密的接口方法上添加@EncryptResult註解即可實現返回結果加密。

五、SpringBoot讀取配置文件

SpringBoot默認會從application.properties或application.yml文件中讀取配置信息,可以通過@ConfigurationProperties註解將配置信息注入到Java Bean對象中,例如:

1、在application.yml文件中定義配置信息:

myapp:
  username: test
  password: 123456

2、定義對應的Java Bean:

@Component
@ConfigurationProperties(prefix="myapp")
public class MyBean {
    private String username;
    private String password;

    // Getters and setters
}

3、在代碼中注入該Java Bean:

@Autowired
private MyBean myBean;

六、配置文件密碼加密

除了使用Jasypt等第三方庫進行配置文件加密外,還可以自己實現加密解密工具類對配置文件密碼進行加密解密。具體實現方式如下:

1、定義自定義加密解密工具類:

public class PasswordUtils {
    public static String encrypt(String str, String key) {
        // 對str進行加密操作
        return encryptedStr;
    }

    public static String decrypt(String encryptedStr, String key) {
        // 對encryptedStr進行解密操作
        return str;
    }
}

2、在application.properties或application.yml文件中配置加密的密碼:

spring.datasource.password = ENC{xxx}

3、在代碼中讀取加密的密碼,並使用自定義工具類進行解密:

@Value("${spring.datasource.password}")
private String password;

String decryptedPassword = PasswordUtils.decrypt(password, "key");

七、Redis配置文件密碼加密

Redis在使用時,也會涉及到密碼等敏感信息的配置。可以使用Jasypt等第三方庫對Redis配置文件中的密碼進行加密操作:

1、在redis.conf文件中配置加密後的密碼:

requirepass ENC{kOx0d7tkx/MWf+7Q9v54/g==}

2、在代碼中讀取加密的密碼,並使用Jasypt工具類進行解密:

@Autowired
private Environment environment;

String password = environment.getProperty("redis.password");
String decryptedPassword = decryptor.decrypt(password);

八、SpringBoot配置文件的加載順序

SpringBoot在啟動時會自動加載多個配置文件,其加載順序如下:

1、命令行參數中的配置項;

2、jar包同級目錄下的config文件夾中的配置文件(優先級低於第1項);

3、jar包內部的配置文件(優先級低於第2項);

4、SpringBoot默認的配置文件(application.properties和application.yml,優先級低於第3項)。

如果存在多個相同的配置項,優先級高的配置項會覆蓋掉優先級低的配置項。

原創文章,作者:UTRU,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/136091.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UTRU的頭像UTRU
上一篇 2024-10-04 00:15
下一篇 2024-10-04 00:15

相關推薦

  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起着至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27
  • SpringBoot如何設置不輸出Info日誌

    本篇文章將帶您了解如何在SpringBoot項目中關閉Info級別日誌輸出。 一、為什麼要關閉Info日誌 在開發中,我們經常會使用Log4j、Logback等框架來輸出日誌信息,…

    編程 2025-04-27
  • 解決springboot中scanBasePackages無法讀取子包的問題

    在使用springboot搭建項目時,可能會遇到scanBasePackages無法讀取子包的問題。本文將從幾個方面詳細闡述如何解決這個問題。 一、問題描述 在使用Springbo…

    編程 2025-04-25
  • SpringBoot請求參數綁定

    解答:SpringBoot請求參數綁定是指將HTTP請求中的參數與Controller方法的參數綁定起來,使得參數的傳遞變得簡單和方便。下面我們將從多個方面對SpringBoot請…

    編程 2025-04-25
  • SpringBoot文件上傳詳解

    一、前言 隨着互聯網的發展,文件上傳成為了必備的功能之一,而SpringBoot作為目前最流行的開發框架之一,為文件上傳提供了便捷而強大的解決方案。 二、使用multipart/f…

    編程 2025-04-24
  • 使用SpringBoot開發高效的Web服務應用

    一、快速入門 SpringBoot可以讓你更快速地搭建Web應用,它為開發者提供了許多使用時省去了很多配置代碼的便利。在這裡,我們將通過一個簡單的示例來介紹如何使用SpringBo…

    編程 2025-04-24
  • 使用SpringBoot連接MySQL數據庫

    SpringBoot是一個用於構建基於Spring框架的應用程序的快速開發工具,它提供了許多函數和庫,使開發人員能夠快速構建應用程序並將其部署到雲中。同時,MySQL是一個流行的關…

    編程 2025-04-24
  • Nacos SpringBoot版本詳解

    一、Nacos簡介 Nacos是一個開源的分佈式配置管理和服務發現平台,為微服務架構提供了基礎設施支持。它可以幫助開發人員解決微服務架構中的服務發現、服務配置、服務元數據管理和流量…

    編程 2025-04-23
  • SpringBoot的好處

    一、簡化開發流程 用SpringBoot開發項目可以大大減少繁瑣的配置工作,大部分的配置都是默認配置,只需要添加相應的依賴,即可完成開發工作。SpringBoot可以讓你更專註於業…

    編程 2025-04-23

發表回復

登錄後才能評論