sql wall support block statement.

This commit is contained in:
wenshao
2016-11-20 13:26:06 +08:00
parent b01273ce00
commit 0ff90bff30
4 changed files with 44 additions and 0 deletions
@@ -45,6 +45,7 @@ public class WallConfig implements WallConfigMBean {
private boolean hintAllow = true;
private boolean lockTableAllow = true;
private boolean startTransactionAllow = true;
private boolean blockAllow = true;
private boolean conditionAndAlwayTrueAllow = false;
private boolean conditionAndAlwayFalseAllow = false;
@@ -789,6 +790,14 @@ public class WallConfig implements WallConfigMBean {
this.insertValuesCheckSize = insertValuesCheckSize;
}
public boolean isBlockAllow() {
return blockAllow;
}
public void setBlockAllow(boolean blockAllow) {
this.blockAllow = blockAllow;
}
public void configFromProperties(Properties properties) {
{
String propertyValue = properties.getProperty("druid.wall.tenantColumn");
@@ -2455,6 +2455,10 @@ public class WallVisitorUtils {
allow = config.isStartTransactionAllow();
denyMessage = "start transaction not allow";
errorCode = ErrorCode.START_TRANSACTION_NOT_ALLOW;
} else if (x instanceof SQLBlockStatement) {
allow = config.isBlockAllow();
denyMessage = "block statement not allow";
errorCode = ErrorCode.BLOCK_NOT_ALLOW;
} else {
allow = config.isNoneBaseStatementAllow();
errorCode = ErrorCode.NONE_BASE_STATEMENT_NOT_ALLOW;
@@ -34,6 +34,7 @@ public interface ErrorCode {
public final static int COMMIT_NOT_ALLOW = 1301;
public final static int ROLLBACK_NOT_ALLOW = 1302;
public final static int START_TRANSACTION_NOT_ALLOW = 1303;
public final static int BLOCK_NOT_ALLOW = 1304;
public final static int SET_NOT_ALLOW = 1200;
public final static int DESC_NOT_ALLOW = 1201;
@@ -0,0 +1,30 @@
/*
* Copyright 1999-2101 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.filter.wall.oracle;
import com.alibaba.druid.wall.WallUtils;
import junit.framework.TestCase;
import org.junit.Assert;
public class OracleWallTest7 extends TestCase {
public void test_true() throws Exception {
String sql = //
"begin\n"
+ "end";
Assert.assertTrue(WallUtils.isValidateOracle(sql));
}
}