zoukankan      html  css  js  c++  java
  • 数据库连接加密

    在实际项目中,经常需要对数据库连接池的相关配置加密,比如说数据库的密码,下面介绍两种加密和解密方法

    一,重写数据库连接池

    import org.apache.commons.codec.binary.Base64;
    import org.apache.commons.dbcp.BasicDataSource;
    
    import java.sql.SQLFeatureNotSupportedException;
    import java.util.logging.Logger;
    
    /**
     * @author:lyy
     * @Date: 2016/2/6 12:16
     * @version:
     * @Description:
     */
    public class UnisConnection extends BasicDataSource {
        private String salt = "unis";
        private String mix = "Th";
    
        public UnisConnection() {
            super();
        }
    
        @Override
        public void setPassword(String password){
            try{
                this.password = decodeUnisPassword(password);
            }catch(Exception e){
    
            }
        }
    
        /**
         * Return the parent Logger of all the Loggers used by this data source. This
         * should be the Logger farthest from the root Logger that is
         * still an ancestor of all of the Loggers used by this data source. Configuring
         * this Logger will affect all of the log messages generated by the data source.
         * In the worst case, this may be the root Logger.
         *
         * @return the parent Logger for this data source
         * @throws SQLFeatureNotSupportedException if the data source does not use
         *                                         {@code java.util.logging}
         * @since 1.7
         */
        @Override
        public Logger getParentLogger() throws SQLFeatureNotSupportedException {
            return null;
        }
    
        /**
        * @author: lyy
        * @Time: 2016/2/6 13:58
        * @Descrption: 根据密码串,反编码出真正的数据库密码
        * @param  encodeStr 密码串
        * @return 原始密码串
        * @throws
        */
        private String decodeUnisPassword(String encodeStr){
            String temp = new String(Base64.decodeBase64(encodeStr));
            temp = temp.substring(mix.length());
            temp = new String(Base64.decodeBase64(temp));
            return temp.substring(salt.length());
        }
    }
    View Code

    然后在配置连接池时,进行如下配置

    <bean id="dataSource" class="com.unisits.zngkpt.data.userprivrmandata.bojo.UnisConnection"  destroy-method="close">
    <property name="driverClassName" value="${driverClasss}"/>
    <property name="url" value="${jdbcUrl}"/>
    <property name="username" value="${loginusername}"/>
    <property name="password" value="${password}"/>
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="${initialSize}"></property>
    <!-- 连接池最大数量 -->
    <property name="maxActive" value="${maxActive}"></property>
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="${maxIdle}"></property>
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="${minIdle}"></property>
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="${maxWait}"></property>
    </bean>

    具体的属性为:

    loginusername=sa
    password=VGhkVzVwYzNSb2RXNXBjdz09

    二,重写PropertyPlaceholderConfiger类

    详见精通spring4.0   --< 6.3.2

     
    
    
  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/8478446.html
Copyright © 2011-2022 走看看