mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improve wall filter
This commit is contained in:
@@ -217,6 +217,11 @@ public final class DruidStatManagerFacade {
|
||||
set.addAll((Set) valueA);
|
||||
set.addAll((Set) valueB);
|
||||
newMap.put(key, set);
|
||||
} else if (valueA instanceof List && valueB instanceof List) {
|
||||
List<Map<String, Object>> mergedList = mergeNamedList((List) valueA, (List) valueB);
|
||||
newMap.put(key, mergedList);
|
||||
} else if (valueA instanceof String && valueB instanceof String && valueA.equals(valueB) && "name".equals(key)) {
|
||||
newMap.put(key, valueA);
|
||||
} else {
|
||||
Object sum = SQLEvalVisitorUtils.add(valueA, valueB);
|
||||
newMap.put(key, sum);
|
||||
@@ -227,6 +232,27 @@ public final class DruidStatManagerFacade {
|
||||
return newMap;
|
||||
}
|
||||
|
||||
private static List<Map<String, Object>> mergeNamedList(List listA, List listB) {
|
||||
Map<String, Map<String, Object>> mapped = new HashMap<String, Map<String, Object>>();
|
||||
for (Object item : (List) listA) {
|
||||
Map<String, Object> map = (Map<String, Object>) item;
|
||||
String name = (String) map.get("name");
|
||||
mapped.put(name, map);
|
||||
}
|
||||
|
||||
List<Map<String, Object>> mergedList = new ArrayList<Map<String, Object>>();
|
||||
for (Object item : (List) listB) {
|
||||
Map<String, Object> mapB = (Map<String, Object>) item;
|
||||
String name = (String) mapB.get("name");
|
||||
Map<String, Object> mapA = mapped.get(name);
|
||||
|
||||
Map<String, Object> mergedMap = mergWallStat(mapA, mapB);
|
||||
mergedList.add(mergedMap);
|
||||
}
|
||||
|
||||
return mergedList;
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getSqlStatDataList(Object datasource) {
|
||||
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
|
||||
Map<?, ?> sqlStatMap = DruidDataSourceUtils.getSqlStatMap(datasource);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.alibaba.druid.wall;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicLongFieldUpdater;
|
||||
|
||||
@@ -42,7 +42,9 @@ public class WallFunctionStat {
|
||||
}
|
||||
|
||||
public Map<String, Object> toMap() {
|
||||
return Collections.<String, Object>singletonMap("invokeCount", invokeCount);
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put("invokeCount", invokeCount);
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.alibaba.druid.wall;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@@ -620,21 +619,25 @@ public abstract class WallProvider {
|
||||
info.put("syntaxErrrorCount", this.getSyntaxErrorCount());
|
||||
|
||||
{
|
||||
Map<String, Map<String, Object>> tables = new LinkedHashMap<String, Map<String, Object>>();
|
||||
List<Map<String, Object>> tables = new ArrayList<Map<String, Object>>();
|
||||
for (Map.Entry<String, WallTableStat> entry : this.tableStats.entrySet()) {
|
||||
tables.put(entry.getKey(), entry.getValue().toMap());
|
||||
Map<String, Object> statMap = entry.getValue().toMap();
|
||||
statMap.put("name", entry.getKey());
|
||||
tables.add(statMap);
|
||||
}
|
||||
info.put("tables", tables);
|
||||
}
|
||||
{
|
||||
Map<String, Map<String, Object>> functions = new LinkedHashMap<String, Map<String, Object>>();
|
||||
List<Map<String, Object>> functions = new ArrayList<Map<String, Object>>();
|
||||
for (Map.Entry<String, WallFunctionStat> entry : this.functionStats.entrySet()) {
|
||||
functions.put(entry.getKey(), entry.getValue().toMap());
|
||||
Map<String, Object> statMap = entry.getValue().toMap();
|
||||
statMap.put("name", entry.getKey());
|
||||
functions.add(statMap);
|
||||
}
|
||||
info.put("functions", functions);
|
||||
}
|
||||
info.put("whiteList", this.getWhiteList());
|
||||
info.put("blackList", this.getBlackList());
|
||||
//info.put("whiteList", this.getWhiteList());
|
||||
//info.put("blackList", this.getBlackList());
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user