Mybatis-generator源码修改之修改xmlmapper生成源码

为防止XSS攻击,本文介绍了如何在MySQL中创建自定义HTML转义函数,并通过修改Mybatis-generator源码,在插入和更新时自动应用此函数。详细步骤包括:创建Maven工程下载Mybatis-generator源码,解决编译依赖问题,定位并修改XMLMapper生成代码,确保只对varchar和char类型的数据应用转义函数。最后,将修改后的class文件替换原jar包中的对应文件,完成源码修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:
项目使用了mybatis,想要防止xss,但是不想在后台去做html代码的转义工作,因为牵扯太多,所以就想着在数据库层面来做这个事儿。

解决办法:
1.在mysql添加一个自定义函数来转义html代码
2.修改mybatis-generator源码,在所有insert和update的地方加上自定义转义函数

mybatis-generator源码修改:

1.新建一个maven工程,使用maven的Download Sources,获得mybatis-generator-core的源码。
pom.xml里面添加以下代码:

    <dependency>
        <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
    </dependency>

2.把源码解压导入到工程里面,首先解决报错的地方
这两个类在这里没用,可以删除掉
还有就是有依赖log4j的地方,添加以下代码获取log4j的包

   <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
     </dependency>

3.解决了以上问题就可以开始修改源码了
目的是修改数据入库的地方,那么就需要找到所有update和insert的地方,查看源码的结构,很容就找到了生成xmlmapper的类,需要修改的类如下图:
共六个类

随便挑一个类出来看看,很容易就发现了如下图所示的地方是mybatis-generate生成的xml传参的地方
xmlmapper传参的地方

跟踪代码进去,有木有很熟悉
这里写图片描述

没错,这就是mybatis的xmlmapper里面的代码
这里写图片描述

因此,只需要在这里把自定义的转义函数加上即可,但是不是所有类型的数据都加上,在这里项目里字符类型只用到了varchar和char型的,所以需要先定义一个函数,判断一下是varchar和char类型的数据才加上自定义函数。代码如下:
工具类
这里自定义一个工具类来做这个事儿,以后如果有其它需要改动的地方也可以加到工具类里,同时也方便统一修改。然后找到需要修改的地方调用一下工具类的函数即可,如下图:
调用工具类函数
其它几个类找到
valuesClause.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
或者
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, “record.”));
或者
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
修改之即可。

修改之后生成的代码如下图所示:
修改之后,xml代码
修改源码工作完成,然后找到编译过后的class文件,替换掉原来jar包里面对应的class即可,同时别忘了把工具类扔到原来的jar里。

至此,源码修改工作完成,有什么不对的地方欢迎大家斧正,由于对Mybatis-generate不熟悉,所以可能还会有更高效的也欢迎大家不吝赐教,另外,Mybatis-generate可以自定义插件,不知道能不能在插件里完成这个事儿呢,有空可以研究研究。

mysql自定义html转义函数链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值