程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> SpringMVC使用隱式jdbc連接信息

SpringMVC使用隱式jdbc連接信息

編輯:JAVA綜合教程

SpringMVC使用隱式jdbc連接信息


本地測試環境中,我們如果使用SpringMVC構建項目時,數據庫的“用戶名、密碼、連接地址”都直接明文寫在配置文件中。而一旦項目構建在運行環境的服務器時,對“用戶名、密碼、連接地址”連接信息進行必要的隱藏,這樣更加安全一些,那麼如何來做隱式jdbc連接信息呢?

一、隱式jdbc連接信息的可行方案

SpringMVC在構建jdbc連接信息時,一般是在“applicationContext.xml”文件中有如下信息提供給項目的JdbcConnection。

<code class="language-xml hljs "><!--{cke_protected}{C}%3C!%2D%2D%20%E5%BC%95%E5%85%A5jdbc%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%20%2D%2D%3E-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:C:/properties/hcmanage.properties</value>
    </property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${driver}"></property>
    <property name="url" value="${url}?useUnicode=true&characterEncoding=utf8&"></property>
    <property name="username" value="${username}"></property>
    <property name="password" value="${password}"></property>

    <property name="testOnBorrow" value="true">
    <property name="validationQuery">
        <value>select 1 from DUAL</value>
    </property>
</property></bean></code>

然後我們在hcmanage.properties文件中配置“用戶名、密碼、連接地址”的明文信息。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbc
username=root
password=root

這種原始的做法很直接的就暴露了我們的“用戶名、密碼、連接地址”等關鍵信息,那麼如何來規避這些關鍵信息呢?最好的做法是在hcmanage.properties文件中我們只提供如下信息顯示:

driver=com.mysql.jdbc.Driver
url=
username=
password=

我們把“用戶名、密碼、連接地址”真實信息保存在相對安全的位置,比如說我們自己的數據庫,該數據庫不在生產環境上,這樣做的話,別人要想知道生產環境上的“用戶名、密碼、連接地址”,就必須先破解我們自己的服務器,然後破解該服務器上的數據庫,相對來說增加了不少難度。

那麼想要實現這種安全的效果,我們該怎麼做呢?

關鍵位置就在“PropertyPlaceholderConfigurer”類上!

<code class="language-xml hljs "><!--{cke_protected}{C}%3C!%2D%2D%20%E5%BC%95%E5%85%A5jdbc%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%20%2D%2D%3E-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:C:/properties/hcmanage.properties</value>
    </property>
</bean></code>

二、繼承PropertyPlaceholderConfigurer類

沒錯,我們新建一個自定義的PropertyPlaceholderConfigurer類,繼承”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”。

EncryptPropertyPlaceholderConfigurer.java

public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
    @Override
    protected String convertProperty(String propertyName, String propertyValue) {
        if (isEncryptProperty(propertyName)) {
            return Constants.databaseMap.get(propertyName);
        }
        return super.convertProperty(propertyName, propertyValue);
    }

    private boolean isEncryptProperty(String pname) {
        for (String name : Constants.DATABASE_PROPERTY_NAMES) {
            if (name.equals(pname)) {
                return true;
            }
        }
        return false;
    }
}

ps:注意關鍵方法

protected String convertProperty(String propertyName, String propertyValue)

該方法會根據配置文件中提供的propertyName,按照我們自己的意願進行轉換,返回對應的propertyValue。

也就是說,我們可以將

driver=com.mysql.jdbc.Driver
url=
username=
password=

通過一定的轉換法則,轉換為

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbc
username=root
password=root

而這個過程是不透明的,也就是所謂的隱式轉換!

三、使用webservice進行jdbc連接信息的獲取

Java實現SSH模式加密, webservice之間通信

如何建立webservice通信連接,你可以參照第二篇。
如何在通信過程中進行非對稱加密,你可以參照第一篇。

由於之前寫過類似博客,我這裡就不再贅述,重要的是提供SpringMVC使用隱式jdbc連接信息的解決方案!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved