MyBatis打印日志参数脱敏问题研究

本文探讨了MyBatis在打印SQL日志时如何处理参数脱敏的问题。作者首先介绍了MyBatis的基本架构,然后通过调试源码找到参数日志的打印位置。在研究过程中,作者发现不修改MyBatis源码无法直接实现功能,但提出了两种可能的解决方案:一是修改MyBatis源码,通过控制getParameterValueString方法来实现脱敏;二是通过在SimpleExecutor中传递parameterMap,将字段名称传递到日志处理部分进行脱敏。但由于涉及大量改动,这两种方法都存在风险和挑战。
摘要由CSDN通过智能技术生成

   1:问题的提出     

        MyBatis执行sql时,如果sql有参数,它的值就会在日志中打印出来,比如像这样:

        ==》Parameters:abc(String)

        有一天领导问我,如果这个参数是私密数据,直接打印出来不太好,能不能给数据脱敏,于是我开始研究这个问题。

        研究这个问题的思路有三个方向:1、阅读学习源码,先了解myBatis框架的整体架构。2、跟着代码一步一步debug,找到打印日志的地方,然后思考怎么实现我们要的功能。3、MyBatis本身是提供拦截器机制给用户的,尝试是否能借用拦截器机制实现功能。

2:问题研究

2.1 对MyBatis框架基本的了解

        如果本身对MyBatis缺乏整体架构的了解就开始研究问题,很容易陷入纷乱芜杂的代码中。所以我们第一步就是对MyBatis有一个基本的认知。

        MyBatis主要有以下组件:

        初看这几个组件会很懵,难以形成对MyBatis基本的认识、其实MyBatis本质上就是对java的jdbc操作做了封装以简化对数据库的操作,那么myBatis的操作就免不了jdbc的痕迹,所以我们先来看jdbc是怎么操作数据库的。以下是一个jdbc操作数据库的简单例子:

    //首先定义下连接数据的URL、用户名、密码
    String url="jdbc:oracle:thin:@192.168.10.165:1521:oracle";
    String user="oracle";
    String password="oracle";

    try {
        //1.加载驱动,使用了反射的知识
        Class.forName("oracle.jdbc.driver.OracleDriver");
        /*
         *  使用DriverManager获取数据库连接
         *  其中返回的Connection就代表了JAVA程序和数据库的连接
         *  不同数据库的URL写法需要查看驱动文档知道,用户名、密码由DBA分配
         */
        Connection conn=DriverManager.getConnection(url, user, password);
        //使用Connection来创建一个Statemen
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值