Mybatis-generator原始碼修改之修改xmlmapper生成原始碼
需求:
專案使用了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傳參的地方
跟蹤程式碼進去,有木有很熟悉
沒錯,這就是mybatis的xmlmapper裡面的程式碼
因此,只需要在這裡把自定義的轉義函式加上即可,但是不是所有型別的資料都加上,在這裡專案裡字元型別只用到了varchar和char型的,所以需要先定義一個函式,判斷一下是varchar和char型別的資料才加上自定義函式。程式碼如下:
這裡自定義一個工具類來做這個事兒,以後如果有其它需要改動的地方也可以加到工具類裡,同時也方便統一修改。然後找到需要修改的地方呼叫一下工具類的函式即可,如下圖:
其它幾個類找到
valuesClause.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
或者
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, “record.”));
或者
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
修改之即可。
修改之後生成的程式碼如下圖所示:
修改原始碼工作完成,然後找到編譯過後的class檔案,替換掉原來jar包裡面對應的class即可,同時別忘了把工具類扔到原來的jar裡。
至此,原始碼修改工作完成,有什麼不對的地方歡迎大家斧正,由於對Mybatis-generate不熟悉,所以可能還會有更高效的也歡迎大家不吝賜教,另外,Mybatis-generate可以自定義外掛,不知道能不能在外掛裡完成這個事兒呢,有空可以研究研究。