2016-07-10 106 views
0

項目建立在Spring-4上,並具有用於SMTP連接和MySql數據庫的bean。但是,這些配置與XML文件一起使用可讀的密碼。 Spring XML中有沒有可讀密碼的建議?Spring Rest API:密碼編碼

我試着搜索多個博客,網站,但沒有找到明確的答案,感謝您是否可以提供幫助。

+0

爲什麼當你的XML配置文件是在安全區的事項? –

+0

@Nguyen:我也想理解這個觀點,你認爲遠程服務器上的WAR文件足夠安全嗎?如果有人能夠訪問它,事情就會暴露。所以只想要有額外的安全層。 –

+0

可以將JDBC連接詳細信息(例如,用於MySQL數據庫)移動到應用程序服務器內的JNDI數據源。像JBoss這樣的應用服務器通常會對JNDI對象值進行加密,以便您的JDBC連接詳細信息在被配置爲JNDI數據源時是安全的。 SMTP連接細節可以類似地存儲爲JNDI資源。如果您使用Tomcat,則可能需要自己加密和解密JNDI資源細節。 – manish

回答

0

您可以將編碼後的密碼放入配置文件並在自定義DataSource中解碼密碼。下面的理念是:

1. 編碼密碼,並把它放到配置文件:

你可以使用任何算法對其進行編碼或加密保護它。例如,使用的Base64爲「MYPASSWORD」的密碼編碼爲「bXlQYXNzd29yZA ==」並投入配置文件:在相應的方法

<property name="password"><value>bXlQYXNzd29yZA==</value></property> 

2. 實現自定義DataSource和解碼/解密口令。以下是延伸org.apache.commons.dbcp.BasicDataSource一個例子:

public class CustomDataSource extends BasicDataSource{ 

    public void setPassword(String encodedPassword){ 
     this.password = decodePassword(encodedPassword); 
    } 

    private String decodePassword(String encodedPassword) { 
     // decode or decrypt the encodedPassowrd 
     return decodedPassword; 
    } 
} 

3. 使用您的配置自定義DataSource

<bean id="dataSource" class="CustomDataSource"> 
    <!-- other properties like driverClassName, url, username, etc. --> 
    <property name="password"><value>bXlQYXNzd29yZA==</value></property> 
</bean>