解决jooq中模糊查询的sql注入问题
jooq模糊查询
单字符通配符:_
多字符通配符:%
name like '%xiaoming%'
在java中的使用:
// Java中
Tables.TABLE_NAME.FIELD_NAME.like("%"+name+"%");
传入的name中如果包含%或者_ 就会产生sql注入问题,这个时候我们希望对传入的包含通配符的字符进行转义后再匹配,但JOOQ中不会自动转义。我们可以采取显式定义转义字符
用一个字符在通配符之间标识前边为普通字符,
示例(使用!字符标识):
name like '%xiao!%ming%' escape '!'
在Java中
// 处理传入的参数,将参数中的%、_、和!分别替换为!%、!_、!!
public static String replaceLike(String str){
if(StringUtils.isNotBlank(str)){
if(str.contains("!") || str.contains("%") || str.contains("_")){
String replaceStr = str.replace("!", "!!");
String replaceStr2 = replaceStr.replace("%", "!%");
String replaceStr3 = replaceStr2.replace("_", "!_");
return replaceStr3;
}
}
return str;
}
// 将参数传入方法进行处理
String str = replaceLike(name);
处理完再进行模糊查询
Tables TABLE_NAME.FIELD_NAME.like("%"+str+"%",'!');