From e5e5a207650dabde08426e4ead52af5e4d293b90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Sat, 17 Mar 2012 00:30:25 +0800 Subject: [PATCH] refactor --- .../alibaba/druid/filter/wall/WallConfig.java | 46 +++++++++++++++---- .../druid/filter/wall/WallProvider.java | 32 +------------ .../druid/filter/wall/WallVisitor.java | 2 +- .../filter/wall/spi/MySqlWallProvider.java | 27 +++++------ .../filter/wall/spi/MySqlWallVisitor.java | 18 ++++---- .../filter/wall/spi/OracleWallProvider.java | 25 +++++----- .../filter/wall/spi/OracleWallVisitor.java | 22 ++++----- .../filter/wall/spi/WallVisitorUtils.java | 8 ++-- 8 files changed, 90 insertions(+), 90 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 def49d2a55..c639e00c52 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java @@ -1,19 +1,28 @@ package com.alibaba.druid.filter.wall; +import java.util.HashSet; +import java.util.Set; + public class WallConfig { - private boolean selelctAllow = true; - private boolean selectWhereAlwayTrueCheck = true; - private boolean selectHavingAlwayTrueCheck = true; + private boolean selelctAllow = true; + private boolean selectWhereAlwayTrueCheck = true; + private boolean selectHavingAlwayTrueCheck = true; - private boolean deleteAllow = true; - private boolean deleteWhereAlwayTrueCheck = true; + private boolean deleteAllow = true; + private boolean deleteWhereAlwayTrueCheck = true; - private boolean updateAllow = true; - private boolean updateWhereAlayTrueCheck = true; + private boolean updateAllow = true; + private boolean updateWhereAlayTrueCheck = true; - private boolean insertAllow = true; - private boolean mergeAllow = true; + private boolean insertAllow = true; + private boolean mergeAllow = true; + + protected final Set permitFunctions = new HashSet(); + protected final Set permitTables = new HashSet(); + protected final Set permitSchemas = new HashSet(); + protected final Set permitNames = new HashSet(); + protected final Set permitObjects = new HashSet(); public boolean isSelelctAllow() { return selelctAllow; @@ -87,4 +96,23 @@ public class WallConfig { this.mergeAllow = mergeAllow; } + public Set getPermitFunctions() { + return permitFunctions; + } + + public Set getPermitTables() { + return permitTables; + } + + public Set getPermitSchemas() { + return permitSchemas; + } + + public Set getPermitNames() { + return permitNames; + } + + public Set getPermitObjects() { + return permitObjects; + } } diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java b/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java index 0c0653610b..b5123aefb3 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallProvider.java @@ -1,10 +1,8 @@ package com.alibaba.druid.filter.wall; import java.util.ArrayList; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; -import java.util.Set; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.parser.NotAllowCommentException; @@ -20,15 +18,9 @@ public abstract class WallProvider { private int whileListMaxSize = 1024; - private int whiteSqlMaxLength = 1024; // 1k + private int whiteSqlMaxLength = 1024; // 1k - protected final Set permitFunctions = new HashSet(); - protected final Set permitTables = new HashSet(); - protected final Set permitSchemas = new HashSet(); - protected final Set permitNames = new HashSet(); - protected final Set permitObjects = new HashSet(); - - private final WallConfig config; + protected final WallConfig config; public WallProvider(WallConfig config){ this.config = config; @@ -117,24 +109,4 @@ public abstract class WallProvider { return true; } - public Set getPermitFunctions() { - return permitFunctions; - } - - public Set getPermitTables() { - return permitTables; - } - - public Set getPermitSchemas() { - return permitSchemas; - } - - public Set getPermitNames() { - return permitNames; - } - - public Set getPermitObjects() { - return permitObjects; - } - } 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 7886346d26..c71a9e0988 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java @@ -7,7 +7,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public interface WallVisitor extends SQLASTVisitor { - WallProvider getProvider(); + WallConfig getConfig(); List getViolations(); diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallProvider.java b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallProvider.java index b4132beb98..1b73473e56 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallProvider.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallProvider.java @@ -1,5 +1,7 @@ package com.alibaba.druid.filter.wall.spi; +import static com.alibaba.druid.filter.wall.spi.WallVisitorUtils.loadResource; + import com.alibaba.druid.filter.wall.WallConfig; import com.alibaba.druid.filter.wall.WallProvider; import com.alibaba.druid.filter.wall.WallVisitor; @@ -8,7 +10,7 @@ import com.alibaba.druid.sql.parser.SQLStatementParser; public class MySqlWallProvider extends WallProvider { - public MySqlWallProvider() { + public MySqlWallProvider(){ this(new WallConfig()); } @@ -29,20 +31,19 @@ public class MySqlWallProvider extends WallProvider { } public void loadExtend() { - WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-mysql.txt"); - WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-mysql.txt"); - WallVisitorUtils.loadResource(this.permitFunctions, "META-INF/druid-filter-wall-permit-function-mysql.txt"); - WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-mysql.txt"); - WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-mysql.txt"); + loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-mysql.txt"); + loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-mysql.txt"); + loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-mysql.txt"); + loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-mysql.txt"); + loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-mysql.txt"); } public void loadDefault() { - WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-mysql-default.txt"); - WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-mysql-default.txt"); - WallVisitorUtils.loadResource(this.permitFunctions, - "META-INF/druid-filter-wall-permit-function-mysql-default.txt"); - WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-mysql-default.txt"); - WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-mysql-default.txt"); + loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-mysql-default.txt"); + loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-mysql-default.txt"); + loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-mysql-default.txt"); + loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-mysql-default.txt"); + loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-mysql-default.txt"); } @Override @@ -52,7 +53,7 @@ public class MySqlWallProvider extends WallProvider { @Override public WallVisitor createWallVisitor() { - return new MySqlWallVisitor(this); + return new MySqlWallVisitor(config); } } 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 b499b33a17..d655fb0e7c 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 @@ -5,7 +5,7 @@ import java.util.List; import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation; import com.alibaba.druid.filter.wall.Violation; -import com.alibaba.druid.filter.wall.WallProvider; +import com.alibaba.druid.filter.wall.WallConfig; import com.alibaba.druid.filter.wall.WallVisitor; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLName; @@ -34,20 +34,20 @@ import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitorAdapter; public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisitor, MySqlASTVisitor { - private final MySqlWallProvider provider; - private final List violations = new ArrayList(); + private final WallConfig config; + private final List violations = new ArrayList(); - public MySqlWallVisitor(MySqlWallProvider provider){ - this.provider = provider; + public MySqlWallVisitor(WallConfig config){ + this.config = config; } - public WallProvider getProvider() { - return provider; + public WallConfig getConfig() { + return config; } public boolean containsPermitObjects(String name) { name = name.toLowerCase(); - return provider.getPermitObjects().contains(name); + return config.getPermitObjects().contains(name); } public List getViolations() { @@ -168,7 +168,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean containsPermitTable(String name) { name = WallVisitorUtils.form(name); - return provider.getPermitTables().contains(name); + return config.getPermitTables().contains(name); } public void preVisit(SQLObject x) { diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java index 8e8c25e094..6ceba749b0 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallProvider.java @@ -1,5 +1,7 @@ package com.alibaba.druid.filter.wall.spi; +import static com.alibaba.druid.filter.wall.spi.WallVisitorUtils.loadResource; + import com.alibaba.druid.filter.wall.WallConfig; import com.alibaba.druid.filter.wall.WallProvider; import com.alibaba.druid.filter.wall.WallVisitor; @@ -29,20 +31,19 @@ public class OracleWallProvider extends WallProvider { } public void loadExtend() { - WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-oracle.txt"); - WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-oracle.txt"); - WallVisitorUtils.loadResource(this.permitFunctions, "META-INF/druid-filter-wall-permit-function-oracle.txt"); - WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-oracle.txt"); - WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-oracle.txt"); + loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-oracle.txt"); + loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-oracle.txt"); + loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-oracle.txt"); + loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-oracle.txt"); + loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-oracle.txt"); } public void loadDefault() { - WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-oracle-default.txt"); - WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-oracle-default.txt"); - WallVisitorUtils.loadResource(this.permitFunctions, - "META-INF/druid-filter-wall-permit-function-oracle-default.txt"); - WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-oracle-default.txt"); - WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-oracle-default.txt"); + loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-oracle-default.txt"); + loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-oracle-default.txt"); + loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-oracle-default.txt"); + loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-oracle-default.txt"); + loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-oracle-default.txt"); } @Override @@ -52,7 +53,7 @@ public class OracleWallProvider extends WallProvider { @Override public WallVisitor createWallVisitor() { - return new OracleWallVisitor(this); + return new OracleWallVisitor(config); } } 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 90c1b14f39..79ab9c6c8a 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 @@ -5,7 +5,7 @@ import java.util.List; import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation; import com.alibaba.druid.filter.wall.Violation; -import com.alibaba.druid.filter.wall.WallProvider; +import com.alibaba.druid.filter.wall.WallConfig; import com.alibaba.druid.filter.wall.WallVisitor; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLName; @@ -34,16 +34,15 @@ import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVIsitorAdapter; public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVisitor { - private OracleWallProvider provider; + private final WallConfig config; private final List violations = new ArrayList(); - public OracleWallVisitor(OracleWallProvider provider){ - this.provider = provider; + public OracleWallVisitor(WallConfig config){ + this.config = config; } - public boolean containsPermitObjects(String name) { - name = name.toLowerCase(); - return provider.getPermitObjects().contains(name); + public WallConfig getConfig() { + return config; } public List getViolations() { @@ -107,7 +106,7 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi @Override public boolean visit(OracleSelectQueryBlock x) { WallVisitorUtils.checkSelelctCondition(this, x.getWhere()); - + return true; } @@ -155,7 +154,7 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi if (name.startsWith("v$") || name.startsWith("v_$")) { return true; } - return provider.getPermitTables().contains(name); + return config.getPermitTables().contains(name); } public void preVisit(SQLObject x) { @@ -179,7 +178,8 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi } @Override - public WallProvider getProvider() { - return this.provider; + public boolean containsPermitObjects(String name) { + return config.getPermitObjects().contains(name); } + } 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 487ad7fa96..f5d16233ea 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 @@ -9,7 +9,6 @@ import java.util.Enumeration; import java.util.Set; import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation; -import com.alibaba.druid.filter.wall.WallProvider; import com.alibaba.druid.filter.wall.WallVisitor; import com.alibaba.druid.logging.Log; import com.alibaba.druid.logging.LogFactory; @@ -59,8 +58,7 @@ public class WallVisitorUtils { return; } - WallProvider provider = visitor.getProvider(); - if (!provider.getConfig().isSelectHavingAlwayTrueCheck()) { + if (!visitor.getConfig().isSelectHavingAlwayTrueCheck()) { return; } @@ -368,7 +366,7 @@ public class WallVisitorUtils { String methodName = x.getMethodName(); - if (visitor.getProvider().getPermitFunctions().contains(methodName.toLowerCase())) { + if (visitor.getConfig().getPermitFunctions().contains(methodName.toLowerCase())) { visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); } @@ -386,7 +384,7 @@ public class WallVisitorUtils { ownerName = form(ownerName); - if (visitor.getProvider().getPermitSchemas().contains(ownerName.toLowerCase())) { + if (visitor.getConfig().getPermitSchemas().contains(ownerName.toLowerCase())) { visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); } }