From c75c44e9eebcb3ccb74de6b661573c8df133d644 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 19 Mar 2013 01:31:32 +0800 Subject: [PATCH] improve WallFilter, support intersectAllow --- .../com/alibaba/druid/wall/WallConfig.java | 11 ++++++++- .../druid/wall/spi/WallVisitorUtils.java | 5 ++++ .../druid/bvt/filter/wall/IntersectTest.java | 23 +++++++++++++++++++ .../druid/bvt/filter/wall/MinusTest.java | 6 ++--- 4 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/IntersectTest.java diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java index 4ca59d25b4..725c5727df 100644 --- a/src/main/java/com/alibaba/druid/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java @@ -45,6 +45,7 @@ public class WallConfig implements WallConfigMBean { private boolean insertAllow = true; private boolean mergeAllow = true; private boolean minusAllow = false; + private boolean intersectAllow = false; private boolean multiStatementAllow = false; @@ -91,10 +92,18 @@ public class WallConfig implements WallConfigMBean { } + public boolean isIntersectAllow() { + return intersectAllow; + } + + public void setIntersectAllow(boolean intersectAllow) { + this.intersectAllow = intersectAllow; + } + public boolean isMinusAllow() { return minusAllow; } - + public void setMinusAllow(boolean minusAllow) { this.minusAllow = minusAllow; } diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index bb0b82af17..1753da5042 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -753,6 +753,11 @@ public class WallVisitorUtils { return; } + if (x.getOperator() == SQLUnionOperator.INTERSECT && !visitor.getConfig().isIntersectAllow()) { + addViolation(visitor, x); + return; + } + if (!visitor.getConfig().isSelectUnionCheck()) { return; } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/IntersectTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/IntersectTest.java new file mode 100644 index 0000000000..e1cec6ef95 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/IntersectTest.java @@ -0,0 +1,23 @@ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallConfig; +import com.alibaba.druid.wall.WallUtils; + +public class IntersectTest extends TestCase { + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateOracle(// + "SELECT * FROM A MINUS SELECT * FROM B")); // + } + + public void test_true() throws Exception { + WallConfig config = new WallConfig(); + config.setMinusAllow(true); + Assert.assertTrue(WallUtils.isValidateOracle(// + "SELECT * FROM A MINUS SELECT * FROM B", config)); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MinusTest.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MinusTest.java index d365522bd8..460a250d59 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/MinusTest.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MinusTest.java @@ -11,13 +11,13 @@ public class MinusTest extends TestCase { public void test_false() throws Exception { Assert.assertFalse(WallUtils.isValidateOracle(// - "SELECT * FROM A MINUS SELECT * FROM B")); // + "SELECT * FROM A Intersect SELECT * FROM B")); // } public void test_true() throws Exception { WallConfig config = new WallConfig(); - config.setMinusAllow(true); + config.setIntersectAllow(true); Assert.assertTrue(WallUtils.isValidateOracle(// - "SELECT * FROM A MINUS SELECT * FROM B", config)); // + "SELECT * FROM A Intersect SELECT * FROM B", config)); // } }