diff --git a/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java b/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java
index 11a5885dd6..3bd6090c3d 100644
--- a/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java
+++ b/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java
@@ -16,6 +16,11 @@
package com.alibaba.druid.util;
public class ServletPathMatcher implements PatternMatcher {
+ private final static ServletPathMatcher instance = new ServletPathMatcher();
+
+ public static ServletPathMatcher getInstance() {
+ return instance;
+ }
/**
*
diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java
index d37b9324b5..0886ac9f9d 100644
--- a/src/main/java/com/alibaba/druid/wall/WallConfig.java
+++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java
@@ -24,353 +24,353 @@ import com.alibaba.druid.wall.spi.WallVisitorUtils;
public class WallConfig implements WallConfigMBean {
- private boolean noneBaseStatementAllow = false;
+ private boolean noneBaseStatementAllow = false;
- private boolean callAllow = true;
- private boolean selelctAllow = true;
- private boolean selectIntoAllow = true;
- private boolean selectIntoOutfileAllow = false;
- private boolean selectWhereAlwayTrueCheck = true;
- private boolean selectHavingAlwayTrueCheck = true;
- private boolean selectUnionCheck = true;
+ private boolean callAllow = true;
+ private boolean selelctAllow = true;
+ private boolean selectIntoAllow = true;
+ private boolean selectIntoOutfileAllow = false;
+ private boolean selectWhereAlwayTrueCheck = true;
+ private boolean selectHavingAlwayTrueCheck = true;
+ private boolean selectUnionCheck = 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;
- private boolean multiStatementAllow = false;
+ private boolean multiStatementAllow = false;
- private boolean truncateAllow = false;
+ private boolean truncateAllow = false;
- private boolean commentAllow = false;
+ private boolean commentAllow = false;
- private boolean schemaCheck = true;
- private boolean tableCheck = true;
- private boolean functionCheck = true;
- private boolean objectCheck = true;
- private boolean variantCheck = true;
+ private boolean schemaCheck = true;
+ private boolean tableCheck = true;
+ private boolean functionCheck = true;
+ private boolean objectCheck = true;
+ private boolean variantCheck = true;
- private boolean mustParameterized = false;
+ private boolean mustParameterized = false;
- private boolean allowDoPrivileged = false;
+ private boolean allowDoPrivileged = false;
- protected final Set permitFunctions = new HashSet();
- protected final Set permitTables = new HashSet();
- protected final Set permitSchemas = new HashSet();
- protected final Set permitVariants = new HashSet();
- protected final Set permitObjects = new HashSet();
+ protected final Set permitFunctions = new HashSet();
+ protected final Set permitTables = new HashSet();
+ protected final Set permitSchemas = new HashSet();
+ protected final Set permitVariants = new HashSet();
+ protected final Set permitObjects = new HashSet();
- protected final Set readOnlyTables = new HashSet();
+ protected final Set readOnlyTables = new HashSet();
- private String dir;
+ private String dir;
- private boolean inited;
+ private boolean inited;
- private String guardTablePattern;
- private String guardField;
+ private String tenantTablePattern;
+ private String tenantColumn;
- public WallConfig(){
+ public WallConfig() {
- }
+ }
- public String getGuardTablePattern() {
- return guardTablePattern;
- }
+ public String getTenantTablePattern() {
+ return tenantTablePattern;
+ }
- public void setGuardTablePattern(String guardTablePattern) {
- this.guardTablePattern = guardTablePattern;
- }
+ public void setTenantTablePattern(String tenantTablePattern) {
+ this.tenantTablePattern = tenantTablePattern;
+ }
- public String getGuardField() {
- return guardField;
- }
+ public String getTenantColumn() {
+ return tenantColumn;
+ }
- public void setGuardField(String guardField) {
- this.guardField = guardField;
- }
+ public void setTenantColumn(String tenantColumn) {
+ this.tenantColumn = tenantColumn;
+ }
- public boolean isAllowDoPrivileged() {
- return allowDoPrivileged;
- }
+ public boolean isAllowDoPrivileged() {
+ return allowDoPrivileged;
+ }
- public void setAllowDoPrivileged(boolean allowDoPrivileged) {
- this.allowDoPrivileged = allowDoPrivileged;
- }
+ public void setAllowDoPrivileged(boolean allowDoPrivileged) {
+ this.allowDoPrivileged = allowDoPrivileged;
+ }
- public boolean isInited() {
- return inited;
- }
+ public boolean isInited() {
+ return inited;
+ }
- public WallConfig(String dir){
- this.dir = dir;
- this.init();
- }
+ public WallConfig(String dir) {
+ this.dir = dir;
+ this.init();
+ }
- public String getDir() {
- return dir;
- }
+ public String getDir() {
+ return dir;
+ }
- public void setDir(String dir) {
- this.dir = dir;
- }
+ public void setDir(String dir) {
+ this.dir = dir;
+ }
- public final void init() {
- loadConfig(dir);
- }
+ public final void init() {
+ loadConfig(dir);
+ }
- public void loadConfig(String dir) {
- if (dir.endsWith("/")) {
- dir = dir.substring(0, dir.length() - 1);
- }
+ public void loadConfig(String dir) {
+ if (dir.endsWith("/")) {
+ dir = dir.substring(0, dir.length() - 1);
+ }
- loadResource(this.permitVariants, dir + "/permit-variant.txt");
- loadResource(this.permitSchemas, dir + "/permit-schema.txt");
- loadResource(this.permitFunctions, dir + "/permit-function.txt");
- loadResource(this.permitTables, dir + "/permit-table.txt");
- loadResource(this.permitObjects, dir + "/permit-object.txt");
- loadResource(this.readOnlyTables, dir + "/readonly-table.txt");
- }
+ loadResource(this.permitVariants, dir + "/permit-variant.txt");
+ loadResource(this.permitSchemas, dir + "/permit-schema.txt");
+ loadResource(this.permitFunctions, dir + "/permit-function.txt");
+ loadResource(this.permitTables, dir + "/permit-table.txt");
+ loadResource(this.permitObjects, dir + "/permit-object.txt");
+ loadResource(this.readOnlyTables, dir + "/readonly-table.txt");
+ }
- public boolean isNoneBaseStatementAllow() {
- return noneBaseStatementAllow;
- }
+ public boolean isNoneBaseStatementAllow() {
+ return noneBaseStatementAllow;
+ }
- public void setNoneBaseStatementAllow(boolean noneBaseStatementAllow) {
- this.noneBaseStatementAllow = noneBaseStatementAllow;
- }
+ public void setNoneBaseStatementAllow(boolean noneBaseStatementAllow) {
+ this.noneBaseStatementAllow = noneBaseStatementAllow;
+ }
- public boolean isTruncateAllow() {
- return truncateAllow;
- }
+ public boolean isTruncateAllow() {
+ return truncateAllow;
+ }
- public void setTruncateAllow(boolean truncateAllow) {
- this.truncateAllow = truncateAllow;
- }
+ public void setTruncateAllow(boolean truncateAllow) {
+ this.truncateAllow = truncateAllow;
+ }
- public boolean isSelelctAllow() {
- return selelctAllow;
- }
+ public boolean isSelelctAllow() {
+ return selelctAllow;
+ }
- public void setSelelctAllow(boolean selelctAllow) {
- this.selelctAllow = selelctAllow;
- }
+ public void setSelelctAllow(boolean selelctAllow) {
+ this.selelctAllow = selelctAllow;
+ }
- public boolean isSelectIntoAllow() {
- return selectIntoAllow;
- }
+ public boolean isSelectIntoAllow() {
+ return selectIntoAllow;
+ }
- public void setSelectIntoAllow(boolean selectIntoAllow) {
- this.selectIntoAllow = selectIntoAllow;
- }
+ public void setSelectIntoAllow(boolean selectIntoAllow) {
+ this.selectIntoAllow = selectIntoAllow;
+ }
- public boolean isSelectIntoOutfileAllow() {
- return selectIntoOutfileAllow;
- }
+ public boolean isSelectIntoOutfileAllow() {
+ return selectIntoOutfileAllow;
+ }
- public void setSelectIntoOutfileAllow(boolean selectIntoOutfileAllow) {
- this.selectIntoOutfileAllow = selectIntoOutfileAllow;
- }
+ public void setSelectIntoOutfileAllow(boolean selectIntoOutfileAllow) {
+ this.selectIntoOutfileAllow = selectIntoOutfileAllow;
+ }
- public boolean isSelectUnionCheck() {
- return selectUnionCheck;
- }
-
- public void setSelectUnionCheck(boolean selectUnionCheck) {
- this.selectUnionCheck = selectUnionCheck;
- }
-
- public boolean isSelectWhereAlwayTrueCheck() {
- return selectWhereAlwayTrueCheck;
- }
-
- public void setSelectWhereAlwayTrueCheck(boolean selectWhereAlwayTrueCheck) {
- this.selectWhereAlwayTrueCheck = selectWhereAlwayTrueCheck;
- }
-
- public boolean isSelectHavingAlwayTrueCheck() {
- return selectHavingAlwayTrueCheck;
- }
-
- public void setSelectHavingAlwayTrueCheck(boolean selectHavingAlwayTrueCheck) {
- this.selectHavingAlwayTrueCheck = selectHavingAlwayTrueCheck;
- }
-
- public boolean isDeleteAllow() {
- return deleteAllow;
- }
-
- public void setDeleteAllow(boolean deleteAllow) {
- this.deleteAllow = deleteAllow;
- }
-
- public boolean isDeleteWhereAlwayTrueCheck() {
- return deleteWhereAlwayTrueCheck;
- }
-
- public void setDeleteWhereAlwayTrueCheck(boolean deleteWhereAlwayTrueCheck) {
- this.deleteWhereAlwayTrueCheck = deleteWhereAlwayTrueCheck;
- }
-
- public boolean isUpdateAllow() {
- return updateAllow;
- }
-
- public void setUpdateAllow(boolean updateAllow) {
- this.updateAllow = updateAllow;
- }
-
- public boolean isUpdateWhereAlayTrueCheck() {
- return updateWhereAlayTrueCheck;
- }
+ public boolean isSelectUnionCheck() {
+ return selectUnionCheck;
+ }
+
+ public void setSelectUnionCheck(boolean selectUnionCheck) {
+ this.selectUnionCheck = selectUnionCheck;
+ }
+
+ public boolean isSelectWhereAlwayTrueCheck() {
+ return selectWhereAlwayTrueCheck;
+ }
+
+ public void setSelectWhereAlwayTrueCheck(boolean selectWhereAlwayTrueCheck) {
+ this.selectWhereAlwayTrueCheck = selectWhereAlwayTrueCheck;
+ }
+
+ public boolean isSelectHavingAlwayTrueCheck() {
+ return selectHavingAlwayTrueCheck;
+ }
+
+ public void setSelectHavingAlwayTrueCheck(boolean selectHavingAlwayTrueCheck) {
+ this.selectHavingAlwayTrueCheck = selectHavingAlwayTrueCheck;
+ }
+
+ public boolean isDeleteAllow() {
+ return deleteAllow;
+ }
+
+ public void setDeleteAllow(boolean deleteAllow) {
+ this.deleteAllow = deleteAllow;
+ }
+
+ public boolean isDeleteWhereAlwayTrueCheck() {
+ return deleteWhereAlwayTrueCheck;
+ }
+
+ public void setDeleteWhereAlwayTrueCheck(boolean deleteWhereAlwayTrueCheck) {
+ this.deleteWhereAlwayTrueCheck = deleteWhereAlwayTrueCheck;
+ }
+
+ public boolean isUpdateAllow() {
+ return updateAllow;
+ }
+
+ public void setUpdateAllow(boolean updateAllow) {
+ this.updateAllow = updateAllow;
+ }
+
+ public boolean isUpdateWhereAlayTrueCheck() {
+ return updateWhereAlayTrueCheck;
+ }
- public void setUpdateWhereAlayTrueCheck(boolean updateWhereAlayTrueCheck) {
- this.updateWhereAlayTrueCheck = updateWhereAlayTrueCheck;
- }
+ public void setUpdateWhereAlayTrueCheck(boolean updateWhereAlayTrueCheck) {
+ this.updateWhereAlayTrueCheck = updateWhereAlayTrueCheck;
+ }
- public boolean isInsertAllow() {
- return insertAllow;
- }
+ public boolean isInsertAllow() {
+ return insertAllow;
+ }
- public void setInsertAllow(boolean insertAllow) {
- this.insertAllow = insertAllow;
- }
+ public void setInsertAllow(boolean insertAllow) {
+ this.insertAllow = insertAllow;
+ }
- public boolean isMergeAllow() {
- return mergeAllow;
- }
+ public boolean isMergeAllow() {
+ return mergeAllow;
+ }
- public void setMergeAllow(boolean mergeAllow) {
- this.mergeAllow = mergeAllow;
- }
+ public void setMergeAllow(boolean mergeAllow) {
+ this.mergeAllow = mergeAllow;
+ }
- public boolean isMultiStatementAllow() {
- return multiStatementAllow;
- }
+ public boolean isMultiStatementAllow() {
+ return multiStatementAllow;
+ }
- public void setMultiStatementAllow(boolean multiStatementAllow) {
- this.multiStatementAllow = multiStatementAllow;
- }
+ public void setMultiStatementAllow(boolean multiStatementAllow) {
+ this.multiStatementAllow = multiStatementAllow;
+ }
- public boolean isSchemaCheck() {
- return schemaCheck;
- }
+ public boolean isSchemaCheck() {
+ return schemaCheck;
+ }
- public void setSchemaCheck(boolean schemaCheck) {
- this.schemaCheck = schemaCheck;
- }
+ public void setSchemaCheck(boolean schemaCheck) {
+ this.schemaCheck = schemaCheck;
+ }
- public boolean isTableCheck() {
- return tableCheck;
- }
+ public boolean isTableCheck() {
+ return tableCheck;
+ }
- public void setTableCheck(boolean tableCheck) {
- this.tableCheck = tableCheck;
- }
+ public void setTableCheck(boolean tableCheck) {
+ this.tableCheck = tableCheck;
+ }
- public boolean isFunctionCheck() {
- return functionCheck;
- }
+ public boolean isFunctionCheck() {
+ return functionCheck;
+ }
- public void setFunctionCheck(boolean functionCheck) {
- this.functionCheck = functionCheck;
- }
+ public void setFunctionCheck(boolean functionCheck) {
+ this.functionCheck = functionCheck;
+ }
- public boolean isVariantCheck() {
- return variantCheck;
- }
+ public boolean isVariantCheck() {
+ return variantCheck;
+ }
- public void setVariantCheck(boolean variantCheck) {
- this.variantCheck = variantCheck;
- }
+ public void setVariantCheck(boolean variantCheck) {
+ this.variantCheck = variantCheck;
+ }
- public boolean isObjectCheck() {
- return objectCheck;
- }
+ public boolean isObjectCheck() {
+ return objectCheck;
+ }
- public void setObjectCheck(boolean objectCheck) {
- this.objectCheck = objectCheck;
- }
+ public void setObjectCheck(boolean objectCheck) {
+ this.objectCheck = objectCheck;
+ }
- // ///////////////////
+ // ///////////////////
- public boolean isCommentAllow() {
- return commentAllow;
- }
+ public boolean isCommentAllow() {
+ return commentAllow;
+ }
- public void setCommentAllow(boolean commentAllow) {
- this.commentAllow = commentAllow;
- }
+ public void setCommentAllow(boolean commentAllow) {
+ this.commentAllow = commentAllow;
+ }
- public Set getPermitFunctions() {
- return permitFunctions;
- }
+ public Set getPermitFunctions() {
+ return permitFunctions;
+ }
- public Set getPermitTables() {
- return permitTables;
- }
+ public Set getPermitTables() {
+ return permitTables;
+ }
- public Set getPermitSchemas() {
- return permitSchemas;
- }
+ public Set getPermitSchemas() {
+ return permitSchemas;
+ }
- public Set getPermitVariants() {
- return permitVariants;
- }
+ public Set getPermitVariants() {
+ return permitVariants;
+ }
- public Set getPermitObjects() {
- return permitObjects;
- }
+ public Set getPermitObjects() {
+ return permitObjects;
+ }
- public Set getReadOnlyTables() {
- return readOnlyTables;
- }
+ public Set getReadOnlyTables() {
+ return readOnlyTables;
+ }
- public boolean isMustParameterized() {
- return mustParameterized;
- }
+ public boolean isMustParameterized() {
+ return mustParameterized;
+ }
- public void setMustParameterized(boolean mustParameterized) {
- this.mustParameterized = mustParameterized;
- }
+ public void setMustParameterized(boolean mustParameterized) {
+ this.mustParameterized = mustParameterized;
+ }
- public boolean isPermitObjects(String name) {
- if (!objectCheck) {
- return false;
- }
+ public boolean isPermitObjects(String name) {
+ if (!objectCheck) {
+ return false;
+ }
- name = WallVisitorUtils.form(name);
- return permitObjects.contains(name);
- }
+ name = WallVisitorUtils.form(name);
+ return permitObjects.contains(name);
+ }
- public boolean isPermitSchema(String name) {
- if (!schemaCheck) {
- return false;
- }
+ public boolean isPermitSchema(String name) {
+ if (!schemaCheck) {
+ return false;
+ }
- name = WallVisitorUtils.form(name);
- return this.permitSchemas.contains(name);
- }
+ name = WallVisitorUtils.form(name);
+ return this.permitSchemas.contains(name);
+ }
- public boolean isPermitFunction(String name) {
- if (!functionCheck) {
- return false;
- }
-
- name = WallVisitorUtils.form(name);
- return this.permitFunctions.contains(name);
- }
-
- public boolean isCallAllow() {
- return callAllow;
- }
-
- public void setCallAllow(boolean callAllow) {
- this.callAllow = callAllow;
- }
+ public boolean isPermitFunction(String name) {
+ if (!functionCheck) {
+ return false;
+ }
+
+ name = WallVisitorUtils.form(name);
+ return this.permitFunctions.contains(name);
+ }
+
+ public boolean isCallAllow() {
+ return callAllow;
+ }
+
+ public void setCallAllow(boolean callAllow) {
+ this.callAllow = callAllow;
+ }
}
diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java
index e694bc8512..649dc6f2d2 100644
--- a/src/main/java/com/alibaba/druid/wall/WallProvider.java
+++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java
@@ -186,13 +186,13 @@ public abstract class WallProvider {
}
}
- private static final ThreadLocal