ibatis自定义DataSourceFactory

今天收到客户的一个要求,把数据源配置文件中的用户名和密码做加密处理,经过对ibatis源码的了解,做出了如下解决方案:

1.创建自定义类
EncryptDataSourceFactory 实现接口com.ibatis.sqlmap.engine.datasource.DataSourceFactory

public class EncryptDataSourceFactory implements DataSourceFactory {
    private static final Logger LOGGER = Logger.getLogger(EncryptDataSourceFactory.class);

    private DataSource dataSource;

    @Override
    public void initialize(Map map) {
        String username = (String) map.get("JDBC.Username");
        String password = (String) map.get("JDBC.Password");
        username = EncryptUtil.decodeByJackHash(username);
        // password解密
        password = EncryptUtil.decodeByJackHash(password);
        map.put("JDBC.Username", username);
        map.put("JDBC.Password", password);

        dataSource = new SimpleDataSource(map);
    }

    @Override
    public DataSource getDataSource() {
        return dataSource;
    }
}

2.sqlMapConfig配置文件修改

添加配置

<typeAlias alias="ENCRYPT" type="***.***.***.EncryptDataSourceFactory" />

修改dataSource的type,对应添加配置中的alias

<dataSource type="ENCRYPT">

完整配置如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    <settings cacheModelsEnabled="true" lazyLoadingEnabled="true"
        enhancementEnabled="true" errorTracingEnabled="true" maxSessions="1024"
        maxTransactions="512" maxRequests="2048" useStatementNamespaces="true" />
    <!-- 使用JDBC的事务管理 -->
    <typeAlias alias="ENCRYPT" type="***.***.***.EncryptDataSourceFactory" />
    <transactionManager type="JDBC">
        <!-- 数据源 -->
        <dataSource type="ENCRYPT">
            <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" />
            <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.50.122:1521:****" />
            <property name="JDBC.Username" value="TllOYm4wM2g=" />
            <property name="JDBC.Password" value="TllOYm4wM2g=" />
        </dataSource>
    </transactionManager>
    <!-- 这里可以写多个实体的映射文件 -->
</sqlMapConfig>

如此就完成了对配置文件中用户名密码的加密处理,但是做完后,仔细想想,这种处理没什么必要,当某人可以接触到配置文件时,也就可以找到相关jia包,反编译出来,什么都知道了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值