From 122d4de51faf3901b8142df3a2a0fb16369c73d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Sat, 17 Mar 2012 01:43:43 +0800 Subject: [PATCH] refactor --- .../alibaba/druid/filter/wall/WallConfig.java | 17 +++++++++++++++++ .../alibaba/druid/filter/wall/WallVisitor.java | 2 -- .../druid/filter/wall/spi/MySqlWallVisitor.java | 11 +++++------ .../filter/wall/spi/OracleWallVisitor.java | 11 +++++------ .../druid/filter/wall/spi/WallVisitorUtils.java | 14 +++++++++----- 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java b/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java index 8981e74019..428ed7d2d3 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java @@ -5,6 +5,8 @@ import static com.alibaba.druid.filter.wall.spi.WallVisitorUtils.loadResource; import java.util.HashSet; import java.util.Set; +import com.alibaba.druid.filter.wall.spi.WallVisitorUtils; + public class WallConfig { private boolean selelctAllow = true; @@ -170,4 +172,19 @@ public class WallConfig { public Set getPermitObjects() { return permitObjects; } + + public boolean isPermitObjects(String name) { + name = WallVisitorUtils.form(name); + return permitObjects.contains(name); + } + + public boolean isPermitSchema(String name) { + name = WallVisitorUtils.form(name); + return this.permitSchemas.contains(name); + } + + public boolean isPermitFunction(String name) { + name = WallVisitorUtils.form(name); + return this.permitFunctions.contains(name); + } } diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java index c71a9e0988..efc2a4cad2 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java @@ -13,7 +13,5 @@ public interface WallVisitor extends SQLASTVisitor { boolean containsPermitTable(String name); - boolean containsPermitObjects(String name); - String toSQL(SQLObject obj); } diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java index e3ed6ece75..3679b89d6b 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java @@ -46,11 +46,6 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi return config; } - public boolean containsPermitObjects(String name) { - name = name.toLowerCase(); - return config.getPermitObjects().contains(name); - } - public List getViolations() { return violations; } @@ -165,7 +160,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean visit(SQLMethodInvokeExpr x) { - WallVisitorUtils.check(this, x); + WallVisitorUtils.checkFunction(this, x); return true; } @@ -202,6 +197,10 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean containsPermitTable(String name) { + if (!config.isTableCheck()) { + return false; + } + name = WallVisitorUtils.form(name); return config.getPermitTables().contains(name); } diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java index 9f5d2a9f8a..88941430b3 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java @@ -72,7 +72,7 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi @Override public boolean visit(SQLMethodInvokeExpr x) { - WallVisitorUtils.check(this, x); + WallVisitorUtils.checkFunction(this, x); return true; } @@ -127,6 +127,10 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi @Override public boolean containsPermitTable(String name) { + if (!config.isTableCheck()) { + return false; + } + name = WallVisitorUtils.form(name); if (name.startsWith("v$") || name.startsWith("v_$")) { return true; @@ -154,11 +158,6 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi } } - @Override - public boolean containsPermitObjects(String name) { - return config.getPermitObjects().contains(name); - } - @Override public boolean visit(SQLSelectStatement x) { if (!config.isSelelctAllow()) { diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java index f383f26cdc..3b062c3064 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java @@ -47,7 +47,7 @@ public class WallVisitorUtils { if (x.getOwner() instanceof SQLIdentifierExpr) { String owner = x.getOwner().toString(); owner = WallVisitorUtils.form(owner); - if (visitor.containsPermitObjects(owner)) { + if (visitor.getConfig().isPermitObjects(owner)) { visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); } } @@ -387,18 +387,22 @@ public class WallVisitorUtils { return false; } - public static void check(WallVisitor visitor, SQLMethodInvokeExpr x) { + public static void checkFunction(WallVisitor visitor, SQLMethodInvokeExpr x) { if (x.getOwner() instanceof SQLIdentifierExpr) { String owner = x.getOwner().toString(); owner = WallVisitorUtils.form(owner); - if (visitor.containsPermitObjects(owner)) { + if (visitor.getConfig().isPermitObjects(owner)) { visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); } } - + + if (!visitor.getConfig().isFunctionCheck()) { + return; + } + String methodName = x.getMethodName(); - if (visitor.getConfig().getPermitFunctions().contains(methodName.toLowerCase())) { + if (visitor.getConfig().isPermitFunction(methodName.toLowerCase())) { visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); }