diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java index 231c2481b9..6b177d6a5c 100644 --- a/src/main/java/com/alibaba/druid/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java @@ -57,6 +57,8 @@ public class WallConfig implements WallConfigMBean { private boolean mustParameterized = false; + private boolean allowDoPrivileged = false; + protected final Set permitFunctions = new HashSet(); protected final Set permitTables = new HashSet(); protected final Set permitSchemas = new HashSet(); @@ -73,6 +75,14 @@ public class WallConfig implements WallConfigMBean { } + public boolean isAllowDoPrivileged() { + return allowDoPrivileged; + } + + public void setAllowDoPrivileged(boolean allowDoPrivileged) { + this.allowDoPrivileged = allowDoPrivileged; + } + public boolean isInited() { return inited; } diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index 9b98061e6f..6e1c888fd2 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -120,7 +120,7 @@ public abstract class WallProvider { } public List check(String sql) { - if (privileged.get() == Boolean.TRUE) { + if (config.isAllowDoPrivileged() && privileged.get() == Boolean.TRUE) { return Collections.emptyList(); } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java index 6b5b9aefc8..85724b7aff 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/DoPrivilegedTest.java @@ -21,6 +21,7 @@ import junit.framework.TestCase; import org.junit.Assert; +import com.alibaba.druid.wall.WallConfig; import com.alibaba.druid.wall.WallProvider; import com.alibaba.druid.wall.WallUtils; @@ -31,10 +32,13 @@ public class DoPrivilegedTest extends TestCase { } public void test_1() throws Exception { + final WallConfig config = new WallConfig(); + config.setAllowDoPrivileged(true); + WallProvider.doPrivileged(new PrivilegedAction() { @Override public Object run() { - Assert.assertTrue(WallUtils.isValidateMySql("select @@version_compile_os")); + Assert.assertTrue(WallUtils.isValidateMySql("select @@version_compile_os", config)); return null; } });