小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

連接池?cái)?shù)據(jù)庫(kù)密碼加密

 奶奶熊 2009-12-02

hibernate使用連接池并且處理數(shù)據(jù)庫(kù)密碼加密

明文密碼太不安全使用加密吧!~
在使用  hibernate框架時(shí)怎么來(lái)處理密碼呢?
首先我們要找一個(gè)切入點(diǎn) 就是 連接池在什么時(shí)間讀的配置 這個(gè)時(shí)候我們解密在給他
看hibernate配置
  <property name="hibernate.connection.provider_class">
   org.hibernate.connection.C3P0ConnectionProvider
  </property>
這就是hibernate把連接交給專門(mén)的連接池類(lèi)來(lái)負(fù)責(zé)
我們就在這里動(dòng)手腳
  <property name="hibernate.connection.provider_class">
   name.ixr.connection.C3P0ConnectionProvider
  </property>
這里換成我們自己的類(lèi),當(dāng)然這個(gè)類(lèi)要有原有類(lèi)的功能
這里我們想到一個(gè)方法使用繼承


  1. package name.ixr.connection;
  2. import java.util.Properties;
  3. import org.hibernate.cfg.Environment;
  4. import name.ixr.util.EncUtil;
  5. /**
  6. * 自定義C3P0處理
  7. * 2009-10-10
  8. * @author IXR
  9. * @version 1.0
  10. */
  11. public class C3P0ConnectionProvider extends org.hibernate.connection.C3P0ConnectionProvider {
  12. }
  13. }
復(fù)制代碼

類(lèi)有了怎么處理呢? 還有原有的類(lèi)有什么方法?
需要下載 hibernate  code查看 我看了他的方法 大概了解了下

知道
hibernate讀取完配置文件把配置文件對(duì)象交給了configure這個(gè)方法
然后重構(gòu)這個(gè)方法,實(shí)現(xiàn)原來(lái)的太麻煩,就算復(fù)制代碼太多我們只處理中間的一個(gè)環(huán)節(jié)所以沒(méi)有必要完全重寫(xiě),我們用多態(tài)吧,都繼承了也是為什么上邊我用繼承,看我怎么寫(xiě)的
  1. /**
  2. * 修改讀取配置文件的業(yè)務(wù)
  3. * 這里主要為了解密密碼
  4. */
  5. public void configure(Properties props){
  6. //獲取配置密碼
  7. String password=props.getProperty(Environment.PASS);
  8. //密碼解
  9. password=EncUtil.encToString(password);
  10. //處理密碼
  11. props.setProperty(Environment.PASS, password);
  12. //交給父類(lèi)處理
  13. super.configure(props);
  14. }

這樣密碼就解密重新設(shè)置了 然后交給父類(lèi)來(lái)實(shí)現(xiàn)原有應(yīng)該實(shí)現(xiàn)的功能呵呵!~
處理完畢EncUtil就是我加密解密類(lèi)!~ 你們可以用自己的加密類(lèi)!~


如果在Spring里,上述方法是不行的。因?yàn)镾pring直接把用戶名密碼給了datasource。hibernate的屬性不能生效

下面是一種便通的方法。需要自己實(shí)現(xiàn)一個(gè)Configurer類(lèi)

<bean id="propertyConfigurer" class="com.oa.scm.db.com.service.MyConfigurer"> 
        <property name="location"> 
            <value>classpath:hibernate.properties</value> 
        </property> 
    </bean>
   
     
     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
             <property name="driverClass"><value>${hibernate.connection.driver_class}</value></property>
            <property name="jdbcUrl"><value>${hibernate.connection.url}</value></property>
            <property name="user"><value>${hibernate.connection.username}</value></property>
            <!-- property name="password"><value>${hibernate.connection.password}</value></property-->
            <property name="initialPoolSize"><value>${initialPoolSize}</value></property>
            <property name="minPoolSize"><value>${hibernate.c3p0.min_size}</value></property>
            <property name="maxPoolSize"><value>${hibernate.c3p0.max_size}</value></property>
            <property name="idleConnectionTestPeriod"><value>${hibernate.c3p0.idle_test_period}</value></property>
            <property name="acquireIncrement"><value>${hibernate.c3p0.acquire_increment}</value></property>
    </bean> 

public class MyConfigurer extends PropertyPlaceholderConfigurer

{

    @Override
    protected void processProperties(
            ConfigurableListableBeanFactory beanFactory, Properties props)
            throws BeansException {

        System.out.println("MyConfigurer!");
        String password = props.getProperty("hibernate.connection.password");
        if (password != null && password.length() > 15) {
            props.setProperty("hibernate.connection.password", EncryptUtil
                    .decrypt(password));
            System.out.println("MyConfigurer done!");
        }
        super.processProperties(beanFactory, props);

    }
}



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多