本篇內容主要講解“Spring Boot怎么給配置項加密”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring Boot怎么給配置項加密”吧!
Spring Boot內置的properties支持為我們讀取properties帶來了便利。Properties文件的屬性主要包含兩種:系統內置(包含各個starter)的屬性和用戶自定義的屬性。系統內置的屬性由項目啟動之時自動加載,不需要我們編寫相關加載方法,而自定義的屬性需要編寫載入操作。
工作中我們會遇到這樣的需求:為了避免敏感信息暴露,配置文件中有些屬性(比如密碼)必須配置加密后的字符串。系統啟動后自動根據我們自定義的解密方法解出明文。對于這樣的需求,我們需要如何操作呢?
假如我們有自定義屬性:
application.properties
username=paul password=$%&*(**( #加密過后的字符串
我們可以使用PostConstruct注解,在創建該bean的實例之時自動執行解密的方法。如下所示:
@Value("${password}")
private String password;
// 表示在創建該bean之時自動執行
@PostConstruct
public void init() {
// 調用我們自己的解密方法
password = PasswordUtil.decode(password);
}比如有如下所示的屬性:
application.properties
spring.datasource.username=rmproject spring.datasource.password=MTJiN3JtcHJvamVjdA==
Spring數據源的密碼是加密過的。但是這個屬性是Spring Boot自己加載的,我們想干預它的加載過程,要比處理自己寫的屬性麻煩多了。
下面為大家介紹一個工具jasypt-spring-boot-starter。它可以做到在Spring Boot加載屬性之前,對屬性進行處理。
該項目GitHub的地址為:https://github.com/ulisesbocchio/jasypt-spring-boot
我們引入項目的dependency:
pom.xml
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
首先,我們需要定義一個標記,來告訴工具哪些屬性是需要解密的。比方說,我們在加密的屬性前增加**{cipher}**字樣:
application.properties
spring.datasource.username=rmproject
spring.datasource.password={cipher}MTJiN3JtcHJvamVjdA==為了支持自定義的加密屬性前綴,需要提供自己實現的EncryptablePropertyDetector類
public class MyEncryptablePropertyDetector implements EncryptablePropertyDetector {
public static final String ENCODED_PASSWORD_HINT = "{cipher}";
// 如果屬性的字符開頭為"{cipher}",返回true,表明該屬性是加密過的
@Override
public boolean isEncrypted(String s) {
if (null != s) {
return s.startsWith(ENCODED_PASSWORD_HINT);
}
return false;
}
// 該方法告訴工具,如何將自定義前綴去除
@Override
public String unwrapEncryptedValue(String s) {
return s.substring(ENCODED_PASSWORD_HINT.length());
}
}有了自定義加密屬性的檢測方法,我們還需要告訴工具如何進行解密操作:
public class MyEncryptablePropertyResolver implements EncryptablePropertyResolver {
//自定義解密方法
@Override
public String resolvePropertyValue(String s) {
if (null != s && s.startsWith(MyEncryptablePropertyDetector.ENCODED_PASSWORD_HINT)) {
return PasswordUtil.decode(s.substring(MyEncryptablePropertyDetector.ENCODED_PASSWORD_HINT.length()));
}
return s;
}
}最后,我們需要將他們注冊為bean
@SpringBootApplication
// 入口類添加該注解,開啟屬性自動解密功能
@EnableEncryptableProperties
public class DemoSpringBootApplication {
// 注冊這兩個bean
@Bean(name = "encryptablePropertyDetector")
public EncryptablePropertyDetector encryptablePropertyDetector() {
return new MyEncryptablePropertyDetector();
}
@Bean(name = "encryptablePropertyResolver")
public EncryptablePropertyResolver encryptablePropertyResolver() {
return new MyEncryptablePropertyResolver();
}
}到此,大功告成,可以啟動項目試試效果了。
到此,相信大家對“Spring Boot怎么給配置項加密”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。