您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Spring Boot怎么給配置項加密”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring Boot怎么給配置項加密”吧!
Spring Boot內(nèi)置的properties支持為我們讀取properties帶來了便利。Properties文件的屬性主要包含兩種:系統(tǒng)內(nèi)置(包含各個starter)的屬性和用戶自定義的屬性。系統(tǒng)內(nèi)置的屬性由項目啟動之時自動加載,不需要我們編寫相關加載方法,而自定義的屬性需要編寫載入操作。
工作中我們會遇到這樣的需求:為了避免敏感信息暴露,配置文件中有些屬性(比如密碼)必須配置加密后的字符串。系統(tǒng)啟動后自動根據(jù)我們自定義的解密方法解出明文。對于這樣的需求,我們需要如何操作呢?
假如我們有自定義屬性:
application.properties
username=paul password=$%&*(**( #加密過后的字符串
我們可以使用PostConstruct注解,在創(chuàng)建該bean的實例之時自動執(zhí)行解密的方法。如下所示:
@Value("${password}") private String password; // 表示在創(chuàng)建該bean之時自動執(zhí)行 @PostConstruct public void init() { // 調用我們自己的解密方法 password = PasswordUtil.decode(password); }
比如有如下所示的屬性:
application.properties
spring.datasource.username=rmproject spring.datasource.password=MTJiN3JtcHJvamVjdA==
Spring數(shù)據(jù)源的密碼是加密過的。但是這個屬性是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==
為了支持自定義的加密屬性前綴,需要提供自己實現(xiàn)的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怎么給配置項加密”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。