ibatis自定义DataSourceFactory

来源:互联网 发布:手机有网络不能看视频 编辑:程序博客网 时间:2024/06/10 16:34

今天收到客户的一个要求,把数据源配置文件中的用户名和密码做加密处理,经过对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包,反编译出来,什么都知道了。

原创粉丝点击