Procházet zdrojové kódy

sql注入接口优化,支持更多的类型

wy před 3 měsíci
rodič
revize
2b786664e4

+ 15 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/sysdata/services/impl/UpdateDataTableImpl.java

@@ -44,6 +44,7 @@ import java.nio.ByteOrder;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 import static com.lc.ibps.api.base.constants.StateEnum.ERROR;
 import static com.lc.ibps.api.base.constants.StateEnum.SUCCESS;
@@ -84,6 +85,9 @@ public class UpdateDataTableImpl extends GenericProvider implements UpdateDataTa
             }else if(BeanUtils.isNotEmpty(queryDTO.getType()) && "append".equals(queryDTO.getType())){
                 String buildApen = append(map,queryDTO.getParams().toArray());
                 list = (List<Map<String, Object>>) commonDao.query(buildApen);
+            }else if(BeanUtils.isNotEmpty(queryDTO.getType()) && "replace".equals(queryDTO.getType())){
+                String reSql = replace(map,queryDTO.getParams().toArray());
+                list = (List<Map<String, Object>>) commonDao.query(reSql);
             }else{
                 Object[] params = queryDTO.getParams().toArray();
                 list = (List<Map<String, Object>>) commonDao.query( map.get("sql_").toString(), params);
@@ -174,6 +178,17 @@ public class UpdateDataTableImpl extends GenericProvider implements UpdateDataTa
         String endSql = sql + o;
         return endSql;
     }
+
+    public String replace(Map<String, Object> map,  Object[] list){
+        String sql = map.get("sql_").toString();
+        List<String> strList = Arrays.stream(list)
+                .map(Object::toString)
+                .collect(Collectors.toList());
+       for(int i = 0;i<strList.size();i++){
+           sql = sql.replace("#{p" + i + "}",strList.get(i));
+       }
+        return sql;
+    }
     @Override
     public APIResult<Void> upEmployee(String str){
         APIResult<Void> result = new APIResult<>();