一、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