/**
* 替换sql中的占位参数
* */
public static String getSql(String indexImpl, LinkedHashMap<String,String> params){
//匹配#{*}格式的占位参数
Pattern pattern = Pattern.compile("#\\{.*?\\}");
Matcher matcher=pattern.matcher(indexImpl);
while(matcher.find()){
String paraStr=matcher.group();
int i = indexImpl.indexOf(paraStr);
String paramName=paraStr.replaceAll("#\\{", "").replaceAll("}","").trim();
if(params!=null&&i!=-1){
//参数防sql注入处理
Codec ORACLE_CODEC = new OracleCodec();
String param= ESAPI.encoder().encodeForSQL(ORACLE_CODEC, params.get(paramName));
//String param=params.get(paramName);
if(param==null){
String reg="(<ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)((?!</).|\\r|\\n)*(</ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)";
indexImpl = indexImpl.trim().replaceAll(reg, "");
}else{
indexImpl=indexImpl.replace(paraStr,"'"+param+"'");
}
}
}
Pattern pattern1 = Pattern.compile("\\$\\{.*?\\}");
Matcher matcher1=pattern1.matcher(indexImpl);
while(matcher1.find()){
String paraStr=matcher1.group();
int i = indexImpl.indexOf(paraStr);
String paramName=paraStr.replaceAll("\\$\\{", "").replaceAll("}","").trim();
if(params!=null&&i!=-1){
String param= params.get(paramName);
if(param==null){
String reg="(<ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)((?!</).|\\r|\\n)*(</ifNotNULL)[\\s]+(column=\""+paramName+"\")[\\s]*(>)";
indexImpl = indexImpl.trim().replaceAll(reg, "");
}else{
indexImpl=indexImpl.replace(paraStr,param);
}
}
}
return indexImpl;
}
/**
* sql查询条件处理
* @param str
* @param map
* @return
*/
public static String trimParam(String str, Map<String, String> map) {
if (str == null) {
return null;
}
for (String key : map.keySet()) {
String reg="(<ifNotNULL)[\\s]+(column=\""+key+"\")[\\s]*(>)((?!</).|\\r|\\n)*(</ifNotNULL)[\\s]+(column=\""+key+"\")[\\s]*(>)";
String value = map.get(key);
if (StringUtils.isEmpty(value)) {
str = str.trim().replaceAll(reg, "");
}
}
str = str.replaceAll("(<ifNotNULL)[\\s]+(column=\")[a-zA-Z_0-9]*(\")[\\s]*(>)", "");
str = str.replaceAll("(</ifNotNULL)[\\s]+(column=\")[a-zA-Z_0-9]*(\")[\\s]*(>)", "");
return str;
}
动态sql替换参数中的占位符号,正则表达式
最新推荐文章于 2024-07-21 12:35:52 发布