本發(fā)明涉及計(jì)算機(jī)軟件應(yīng)用技術(shù)領(lǐng)域,具體涉及一種基于Spring的property文件的密碼加密方法。
背景技術(shù):
Spring是一個(gè)開源框架,Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開發(fā)框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的??蚣艿闹饕獌?yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許使用者選擇使用哪一個(gè)組件,同時(shí)為 J2EE 應(yīng)用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。Spring的核心是控制反轉(zhuǎn)(IoC)和面向切面(AOP)。簡(jiǎn)單來說,Spring是一個(gè)分層的JavaSE/EEfull-stack(一站式) 輕量級(jí)開源框架。
property文件是一個(gè)以.properties為后綴的文件,其作用是保存應(yīng)用運(yùn)行時(shí)的配置變量。對(duì)于一些密碼類型的配置如果不進(jìn)行加密,如數(shù)據(jù)庫密碼,可能會(huì)造成密碼泄露等問題?,F(xiàn)有技術(shù)中通常采用兩次base64進(jìn)行加密。
Spring本身提供PropertyPlaceholderConfigurer類讀取property文件,其中該類中的convertProperty方法為將給定的property鍵轉(zhuǎn)換為相應(yīng)的值。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是:本發(fā)明針對(duì)以上問題,為web項(xiàng)目的property文件加密,防止密碼暴露在生產(chǎn)環(huán)境,提供一種基于Spring的property文件的密碼加密方法,加密方法可自行定義,本發(fā)明的重點(diǎn)是提出一種簡(jiǎn)單有效的可統(tǒng)一密碼加密的一個(gè)類,而不需其他地方修改。
本發(fā)明所采用的技術(shù)方案為:
一種基于Spring的property文件的密碼加密方法,所述方法通過在Spring中新寫一個(gè)類,繼承spring的PropertyPlaceholderConfigurer類,并覆蓋PropertyPlaceholderConfigurer類的convertProperty方法,然后將property文件注入到新寫的類中,從而實(shí)現(xiàn)密碼加密。
將property配置文件注入到新寫的類的實(shí)現(xiàn)過程如下:在applicationContext.xml文件中,將property配置文件路徑寫明到新寫的類的locations(位置)屬性中。
所述applicationContext.xml是進(jìn)行spring管理配置的xml文件。
所述方法實(shí)現(xiàn)流程如下:
1)繼承spring原生的PropertyPlaceholderConfigurer類,進(jìn)行重寫;
2)重寫convertProperty方法,按照property文件的加密屬性名單中propertyName進(jìn)行區(qū)分密碼和非密碼類型,進(jìn)而對(duì)密碼類型進(jìn)行解密。
所述property文件是保存應(yīng)用環(huán)境配置的內(nèi)容為鍵值對(duì)的文件。
所述密碼和非密碼類型判斷過程如下:
通過判斷propertyName配置是否為password后綴,若是,返回true,若否,返回false。
所述方法通過在property文件中定義受環(huán)境影響易變的變量,可以隨部署環(huán)境變化而進(jìn)行相應(yīng)修改。
易受環(huán)境影響的變量就是一些應(yīng)用依賴的外部變量,比如數(shù)據(jù)庫地址,數(shù)據(jù)庫密碼等,需要放置在配置文件中,而不能放在代碼中,可以隨部署環(huán)境進(jìn)行修改。
本發(fā)明的有益效果為:
本發(fā)明方法適用Spring構(gòu)建的web項(xiàng)目,避免密碼泄露,能夠通過簡(jiǎn)單有效的可統(tǒng)一密碼加密的一個(gè)類,而不需其他地方修改。
附圖說明
圖1為本發(fā)明密碼類型判斷流程圖。
具體實(shí)施方式
根據(jù)說明書附圖,結(jié)合具體實(shí)施方式對(duì)本發(fā)明進(jìn)一步說明:
實(shí)施例1:
一種基于Spring的property文件的密碼加密方法,所述方法通過在Spring中新寫一個(gè)類,繼承spring的PropertyPlaceholderConfigurer類,并覆蓋PropertyPlaceholderConfigurer類的convertProperty方法,然后將property文件注入到新寫的類中,從而實(shí)現(xiàn)密碼加密。
實(shí)施例2
在實(shí)施例1的基礎(chǔ),本實(shí)施例將property配置文件注入到新寫的類的實(shí)現(xiàn)過程如下:在applicationContext.xml文件中,將property配置文件路徑寫明到新寫的類的locations(位置)屬性中。
實(shí)施例3
在實(shí)施例2的基礎(chǔ),本實(shí)施例所述applicationContext.xml是進(jìn)行spring管理配置的xml文件。
實(shí)施例4
如圖1所示,在實(shí)施例1、2或3的基礎(chǔ),本實(shí)施例所述方法實(shí)現(xiàn)流程如下:
1)繼承spring原生的PropertyPlaceholderConfigurer類,進(jìn)行重寫;
2)重寫convertProperty方法,按照property文件的加密屬性名單中propertyName進(jìn)行區(qū)分密碼和非密碼類型,進(jìn)而對(duì)密碼類型進(jìn)行解密。
相關(guān)代碼如下:
//繼承spring原生的PropertyPlaceholderConfigurer類,進(jìn)行重寫
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
@Override
//重寫convertProperty方法,按照propertyName進(jìn)行區(qū)分密碼和非密碼類型,進(jìn)而對(duì)密碼類型進(jìn)行解密
protected String convertProperty(String propertyName, String propertyValue) {
//判斷配置是否為密碼類型,若是進(jìn)行解密,若否直接返回
if (isEncryptProp(propertyName)) {
//按照選定的加密方法進(jìn)行密碼解密
String decryptValue = CryptoUtils.getDecryptString(propertyValue);
return decryptValue;
} else {
return propertyValue;
}
}
實(shí)施例5
在實(shí)施例4的基礎(chǔ),本實(shí)施例所述property文件是保存應(yīng)用環(huán)境配置的內(nèi)容為鍵值對(duì)的文件。
實(shí)施例6
在實(shí)施例5的基礎(chǔ),本實(shí)施例所述密碼和非密碼類型判斷過程如下:
通過判斷propertyName配置是否為password后綴,若是,返回true,若否,返回false。
相關(guān)代碼如下:
//判斷配置是否為密碼類型
private boolean isEncryptProp(String propertyName) {
//判斷配置是否為password后綴,若是返回true,若否返回false
if (propertyName.endsWith("password")) {
return true;
}
return false;
}
}
實(shí)施例7
在實(shí)施例6的基礎(chǔ),本實(shí)施例所述方法通過在property文件中定義受環(huán)境影響易變的變量,可以隨部署環(huán)境變化而進(jìn)行相應(yīng)修改。
易受環(huán)境影響的變量就是一些應(yīng)用依賴的外部變量,比如數(shù)據(jù)庫地址,數(shù)據(jù)庫密碼等,需要放置在配置文件中,而不能放在代碼中,可以隨部署環(huán)境進(jìn)行修改。
property配置文件示例配置如下:
實(shí)施方式僅用于說明本發(fā)明,而并非對(duì)本發(fā)明的限制,有關(guān)技術(shù)領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
</bean>
</property>
</list>
<value>classpath*:/application.properties</value>
<list>
<property name="locations">
<bean class="com.inspur.cloudframework.spring.beans.factory.config.EncryptPropertyPlaceholderConfigurer">
<-- 定義受環(huán)境影響易變的變量 -->