From 08fa27d57a04d3ad43f9e1431268350a544f9f40 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 31 Mar 2013 14:00:02 +0800 Subject: [PATCH 1/2] improve wall filter, add detail message --- .../druid/filter/config/ConfigFilter.java | 3 +- .../MySqlAlterTableModifyColumn.java | 1 - .../druid/support/console/DruidStat.java | 1 - .../com/alibaba/druid/wall/Violation.java | 1 + .../com/alibaba/druid/wall/WallFilter.java | 8 +-- .../com/alibaba/druid/wall/WallProvider.java | 15 +++--- .../druid/wall/spi/MySqlWallVisitor.java | 10 ++-- .../druid/wall/spi/OracleWallVisitor.java | 16 +++--- .../alibaba/druid/wall/spi/PGWallVisitor.java | 6 +-- .../druid/wall/spi/SQLServerWallVisitor.java | 25 ++++----- .../druid/wall/spi/WallVisitorUtils.java | 52 +++++++++---------- .../violation/IllegalSQLObjectViolation.java | 14 ++++- .../wall/violation/SyntaxErrorViolation.java | 7 +++ 13 files changed, 91 insertions(+), 68 deletions(-) diff --git a/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java b/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java index 2bcbc9fe5e..58760be896 100644 --- a/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java +++ b/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java @@ -279,7 +279,8 @@ public class ConfigFilter extends FilterAdapter { } } - private InputStream getFileAsStream(String filePath) throws FileNotFoundException { + @SuppressWarnings("resource") + private InputStream getFileAsStream(String filePath) throws FileNotFoundException { InputStream inStream = null; File file = new File(filePath); if (file.exists()) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableModifyColumn.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableModifyColumn.java index 457f06993b..25044436e7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableModifyColumn.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableModifyColumn.java @@ -16,7 +16,6 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; diff --git a/src/main/java/com/alibaba/druid/support/console/DruidStat.java b/src/main/java/com/alibaba/druid/support/console/DruidStat.java index f03c1701ff..5718366ee7 100644 --- a/src/main/java/com/alibaba/druid/support/console/DruidStat.java +++ b/src/main/java/com/alibaba/druid/support/console/DruidStat.java @@ -36,7 +36,6 @@ import com.sun.tools.attach.AgentLoadException; import com.sun.tools.attach.AttachNotSupportedException; import com.sun.tools.attach.VirtualMachine; -@SuppressWarnings("restriction") public class DruidStat { private static final String LOCAL_CONNECTOR_ADDRESS_PROP = "com.sun.management.jmxremote.localConnectorAddress"; diff --git a/src/main/java/com/alibaba/druid/wall/Violation.java b/src/main/java/com/alibaba/druid/wall/Violation.java index ba82ab4407..07cd139589 100644 --- a/src/main/java/com/alibaba/druid/wall/Violation.java +++ b/src/main/java/com/alibaba/druid/wall/Violation.java @@ -16,6 +16,7 @@ package com.alibaba.druid.wall; public interface Violation { + String getMessage(); String toString(); } diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java index b73a4ae1ff..a39b802ea7 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFilter.java +++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java @@ -423,16 +423,18 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { if (violations.size() > 0) { violationCount.incrementAndGet(); + Violation firstViolation = violations.get(0); if (isLogViolation()) { - LOG.error("sql injection violation : " + sql); + LOG.error("sql injection violation, " + firstViolation.getMessage() + " : " + sql); } if (throwException) { if (violations.get(0) instanceof SyntaxErrorViolation) { SyntaxErrorViolation violation = (SyntaxErrorViolation) violations.get(0); - throw new SQLException("sql injection violation : " + sql, violation.getException()); + throw new SQLException("sql injection violation, " + firstViolation.getMessage() + " : " + sql, + violation.getException()); } else { - throw new SQLException("sql injection violation : " + sql); + throw new SQLException("sql injection violation, " + firstViolation.getMessage() + " : " + sql); } } } diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index 2aeaabe0ed..9980d7a782 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -252,11 +252,11 @@ public abstract class WallProvider { public WallCheckResult check(String sql) { WallContext context = WallContext.current(); - + if (context != null && !this.dbType.equals(context.getDbType())) { WallContext.clearContext(); } - + WallContext.createIfNotExists(this.dbType); WallCheckResult result = new WallCheckResult(); @@ -270,7 +270,7 @@ public abstract class WallProvider { sqlStat.incrementAndGetExecuteCount(); return result; } - + try { SQLStatementParser parser = createParser(sql); @@ -280,8 +280,9 @@ public abstract class WallProvider { parser.parseStatementList(result.getStatementList()); - if (parser.getLexer().token() != Token.EOF) { - result.getViolations().add(new IllegalSQLObjectViolation(sql)); + final Token lastToken = parser.getLexer().token(); + if (lastToken != Token.EOF) { + result.getViolations().add(new IllegalSQLObjectViolation("not terminal sql, token " + lastToken, sql)); return result; } } catch (NotAllowCommentException e) { @@ -303,7 +304,7 @@ public abstract class WallProvider { } if (result.getStatementList().size() > 1 && !config.isMultiStatementAllow()) { - result.getViolations().add(new IllegalSQLObjectViolation(sql)); + result.getViolations().add(new IllegalSQLObjectViolation("multi-statement not allow", sql)); return result; } @@ -314,7 +315,7 @@ public abstract class WallProvider { try { stmt.accept(visitor); } catch (ParserException e) { - result.getViolations().add(new IllegalSQLObjectViolation(sql)); + result.getViolations().add(new SyntaxErrorViolation(e, sql)); return result; } diff --git a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java index 58b182629a..86fa10593e 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java @@ -165,7 +165,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean visit(SQLSelectStatement x) { if (!config.isSelelctAllow()) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("select not allow", this.toSQL(x))); return false; } @@ -177,7 +177,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi if (x.getRowCount() instanceof SQLNumericLiteralExpr) { int rowCount = ((SQLNumericLiteralExpr) x.getRowCount()).getNumber().intValue(); if (rowCount == 0) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("limit row 0", this.toSQL(x))); } } return true; @@ -190,7 +190,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi } if (config.isVariantCheck() && varName.startsWith("@@")) { - violations.add(new IllegalSQLObjectViolation(toSQL(x))); + violations.add(new IllegalSQLObjectViolation("global variable", toSQL(x))); } return false; @@ -216,7 +216,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean visit(MySqlOutFileExpr x) { if (!config.isSelectIntoOutfileAllow()) { - violations.add(new IllegalSQLObjectViolation(toSQL(x))); + violations.add(new IllegalSQLObjectViolation("into out file not allow", toSQL(x))); } return true; @@ -285,7 +285,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi } if (!allow) { - violations.add(new IllegalSQLObjectViolation(x.getClass() + " not allow, " + toSQL(x))); + violations.add(new IllegalSQLObjectViolation(x.getClass() + " not allow", toSQL(x))); } } diff --git a/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java index 879fd738c1..57ceaf436d 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/OracleWallVisitor.java @@ -75,7 +75,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi public void addViolation(Violation violation) { this.violations.add(violation); } - + public List getViolations() { return violations; } @@ -84,7 +84,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi String name = x.getName(); name = WallVisitorUtils.form(name); if (config.isVariantCheck() && config.getDenyVariants().contains(name)) { - getViolations().add(new IllegalSQLObjectViolation(toSQL(x))); + getViolations().add(new IllegalSQLObjectViolation("variable not allow : " + name, toSQL(x))); } return true; } @@ -195,17 +195,17 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi allow = true; } else if (x instanceof SQLTruncateStatement) { allow = config.isTruncateAllow(); - } - + } + if (!allow) { - violations.add(new IllegalSQLObjectViolation(toSQL(x))); + violations.add(new IllegalSQLObjectViolation("not allow statement", toSQL(x))); } } @Override public boolean visit(SQLSelectStatement x) { if (!config.isSelelctAllow()) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("select not allow", this.toSQL(x))); return false; } @@ -234,7 +234,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi @Override public boolean visit(OracleMultiInsertStatement x) { if (!config.isInsertAllow()) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("insert not allow", this.toSQL(x))); return false; } @@ -263,7 +263,7 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi return true; } - + @Override public boolean visit(SQLSelectItem x) { WallVisitorUtils.check(this, x); diff --git a/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java index 61b4f263e6..9b868922aa 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/PGWallVisitor.java @@ -79,7 +79,7 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor { String name = x.getName(); name = WallVisitorUtils.form(name); if (config.isVariantCheck() && config.getDenyVariants().contains(name)) { - getViolations().add(new IllegalSQLObjectViolation(toSQL(x))); + getViolations().add(new IllegalSQLObjectViolation("variable not allow : " + name, toSQL(x))); } return true; } @@ -186,14 +186,14 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor { } if (!allow) { - violations.add(new IllegalSQLObjectViolation(toSQL(x))); + violations.add(new IllegalSQLObjectViolation("not allow statement", toSQL(x))); } } @Override public boolean visit(SQLSelectStatement x) { if (!config.isSelelctAllow()) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("selelct not allow", this.toSQL(x))); return false; } diff --git a/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java index f38e6f4ffe..a6fac68760 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/SQLServerWallVisitor.java @@ -73,7 +73,7 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements public void addViolation(Violation violation) { this.violations.add(violation); } - + @Override public List getViolations() { return violations; @@ -97,7 +97,7 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements String name = x.getName(); name = WallVisitorUtils.form(name); if (config.isVariantCheck() && config.getDenyVariants().contains(name)) { - getViolations().add(new IllegalSQLObjectViolation(toSQL(x))); + getViolations().add(new IllegalSQLObjectViolation("variable not allow : " + name, toSQL(x))); } return true; } @@ -138,7 +138,7 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements WallVisitorUtils.checkHaving(this, x.getHaving()); return true; } - + @Override public boolean visit(SQLServerSelectQueryBlock x) { WallVisitorUtils.checkSelelct(this, x); @@ -185,14 +185,14 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements } if (!allow) { - violations.add(new IllegalSQLObjectViolation(toSQL(x))); + violations.add(new IllegalSQLObjectViolation("not allow statement", toSQL(x))); } } @Override public boolean visit(SQLSelectStatement x) { if (!config.isSelelctAllow()) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("selelct not allow", this.toSQL(x))); return false; } @@ -202,7 +202,7 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements @Override public boolean visit(SQLInsertStatement x) { if (!config.isInsertAllow()) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("insert not allow", this.toSQL(x))); return false; } @@ -229,7 +229,7 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements } if (config.isVariantCheck() && varName.startsWith("@@")) { - violations.add(new IllegalSQLObjectViolation(toSQL(x))); + violations.add(new IllegalSQLObjectViolation("global variable not allow", toSQL(x))); } return false; @@ -238,14 +238,15 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements @Override public boolean visit(SQLServerObjectReferenceExpr x) { if (x.getSchema() != null && !provider.checkDenySchema(x.getSchema())) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("schema not allow : " + x.getSchema(), this.toSQL(x))); } if (x.getDatabase() != null && !provider.checkDenySchema(x.getDatabase())) { - this.getViolations().add(new IllegalSQLObjectViolation(this.toSQL(x))); + this.getViolations().add(new IllegalSQLObjectViolation("schema not allow : " + x.getDatabase(), + this.toSQL(x))); } return true; } - + @Override public boolean visit(SQLServerInsertStatement x) { this.visit((SQLInsertStatement) x); @@ -254,9 +255,9 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements @Override public void endVisit(SQLServerInsertStatement x) { - this.endVisit((SQLInsertStatement) x); + this.endVisit((SQLInsertStatement) x); } - + @Override public boolean visit(SQLSelectItem x) { WallVisitorUtils.check(this, x); 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 02abceec2f..882ee67fc9 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -93,7 +93,7 @@ public class WallVisitorUtils { SQLTableSource from = queryBlock.getFrom(); if (from instanceof SQLExprTableSource) { - addViolation(visitor, x); + addViolation(visitor, "'SELECT *' not allow", x); } } } @@ -106,7 +106,7 @@ public class WallVisitorUtils { checkReadOnly(visitor, x.getTableSource()); if (!visitor.getConfig().isInsertAllow()) { - addViolation(visitor, x); + addViolation(visitor, "insert not allow", x); } } @@ -120,7 +120,7 @@ public class WallVisitorUtils { } if (!visitor.getConfig().isSelectIntoAllow() && x.getInto() != null) { - addViolation(visitor, x); + addViolation(visitor, "select into not allow", x); return; } @@ -144,7 +144,7 @@ public class WallVisitorUtils { } if (!isSimpleConstExpr) { - addViolation(visitor, x); + addViolation(visitor, "select alway true condition not allow", x); } } @@ -158,7 +158,7 @@ public class WallVisitorUtils { } if (Boolean.TRUE == getConditionValue(visitor, x, visitor.getConfig().isSelectHavingAlwayTrueCheck())) { - addViolation(visitor, x); + addViolation(visitor, "having alway true condition not allow", x); } } @@ -166,14 +166,14 @@ public class WallVisitorUtils { checkReadOnly(visitor, x.getExprTableSource()); if (!visitor.getConfig().isDeleteAllow()) { - addViolation(visitor, x); + addViolation(visitor, "delete not allow", x); return; } if (x.getWhere() == null || Boolean.TRUE == getConditionValue(visitor, x.getWhere(), visitor.getConfig().isDeleteWhereAlwayTrueCheck())) { - addViolation(visitor, x); + addViolation(visitor, "delete alway true condition not allow", x); return; } @@ -192,7 +192,7 @@ public class WallVisitorUtils { x.accept(exportParameterVisitor); if (exportParameterVisitor.getParameters().size() > 0) { - addViolation(visitor, x); + addViolation(visitor, "sql must parameterized", x); return; } } @@ -343,7 +343,7 @@ public class WallVisitorUtils { boolean readOnlyValid = visitor.getProvider().checkReadOnlyTable(tableName); if (!readOnlyValid) { - addViolation(visitor, tableSource); + addViolation(visitor, "table readonly : " + tableName, tableSource); } } else if (tableSource instanceof SQLJoinTableSource) { SQLJoinTableSource join = (SQLJoinTableSource) tableSource; @@ -357,7 +357,7 @@ public class WallVisitorUtils { checkReadOnly(visitor, x.getTableSource()); if (!visitor.getConfig().isUpdateAllow()) { - addViolation(visitor, x); + addViolation(visitor, "update not allow", x); return; } @@ -366,17 +366,17 @@ public class WallVisitorUtils { if (x instanceof MySqlUpdateStatement) { MySqlUpdateStatement mysqlUpdate = (MySqlUpdateStatement) x; if (mysqlUpdate.getLimit() == null) { - addViolation(visitor, x); + addViolation(visitor, "update alway true condition not allow", x); return; } } else { - addViolation(visitor, x); + addViolation(visitor, "update alway true condition not allow", x); return; } } if (Boolean.TRUE == getConditionValue(visitor, x.getWhere(), true)) { - addViolation(visitor, x); + addViolation(visitor, "update alway true condition not allow", x); return; } } @@ -566,19 +566,19 @@ public class WallVisitorUtils { final WallConditionContext current = wallConditionContextLocal.get(); if (current.hasPartAlwayTrue() && alwayTrueCheck) { - addViolation(visitor, x); + addViolation(visitor, "part alway true condition not allow", x); } if (current.hasConstArithmetic() && !visitor.getConfig().isConstArithmeticAllow()) { - addViolation(visitor, x); + addViolation(visitor, "const arithmetic not allow", x); } if (current.hasXor() && !visitor.getConfig().isConditionOpXorAllow()) { - addViolation(visitor, x); + addViolation(visitor, "xor not allow", x); } if (current.hasBitwise() && !visitor.getConfig().isConditionOpBitwseAllow()) { - addViolation(visitor, x); + addViolation(visitor, "bitwise operator not allow", x); } return value; @@ -737,7 +737,7 @@ public class WallVisitorUtils { String methodName = x.getMethodName(); if (!visitor.getProvider().checkDenyFunction(methodName)) { - addViolation(visitor, x); + addViolation(visitor, "deny function : " + methodName, x); } } @@ -747,12 +747,12 @@ public class WallVisitorUtils { String owner = ((SQLName) x).getSimleName(); owner = WallVisitorUtils.form(owner); if (!visitor.getProvider().checkDenySchema(owner)) { - addViolation(visitor, x); + addViolation(visitor, "deny schema : " + owner, x); return false; } if (visitor.getConfig().isDenyObjects(owner)) { - addViolation(visitor, x); + addViolation(visitor, "deny object : " + owner, x); return false; } } @@ -778,7 +778,7 @@ public class WallVisitorUtils { if (expr instanceof SQLName) { String tableName = ((SQLName) expr).getSimleName(); if (visitor.isDenyTable(tableName)) { - addViolation(visitor, x); + addViolation(visitor, "deny table : " + tableName, x); return false; } } @@ -786,18 +786,18 @@ public class WallVisitorUtils { return true; } - private static void addViolation(WallVisitor visitor, SQLObject x) { - visitor.addViolation(new IllegalSQLObjectViolation(visitor.toSQL(x))); + private static void addViolation(WallVisitor visitor, String message, SQLObject x) { + visitor.addViolation(new IllegalSQLObjectViolation(message, visitor.toSQL(x))); } public static void checkUnion(WallVisitor visitor, SQLUnionQuery x) { if (x.getOperator() == SQLUnionOperator.MINUS && !visitor.getConfig().isMinusAllow()) { - addViolation(visitor, x); + addViolation(visitor, "minus not allow", x); return; } if (x.getOperator() == SQLUnionOperator.INTERSECT && !visitor.getConfig().isIntersectAllow()) { - addViolation(visitor, x); + addViolation(visitor, "intersect not allow", x); return; } @@ -806,7 +806,7 @@ public class WallVisitorUtils { } if (WallVisitorUtils.queryBlockFromIsNull(x.getLeft()) || WallVisitorUtils.queryBlockFromIsNull(x.getRight())) { - addViolation(visitor, x); + addViolation(visitor, "union query not contains 'from clause'", x); } } diff --git a/src/main/java/com/alibaba/druid/wall/violation/IllegalSQLObjectViolation.java b/src/main/java/com/alibaba/druid/wall/violation/IllegalSQLObjectViolation.java index b8733193c4..03bcbdf33c 100644 --- a/src/main/java/com/alibaba/druid/wall/violation/IllegalSQLObjectViolation.java +++ b/src/main/java/com/alibaba/druid/wall/violation/IllegalSQLObjectViolation.java @@ -19,13 +19,14 @@ import com.alibaba.druid.wall.Violation; public class IllegalSQLObjectViolation implements Violation { + private String message; private String sqlPart; public IllegalSQLObjectViolation(){ } - public IllegalSQLObjectViolation(String condition){ + public IllegalSQLObjectViolation(String message, String condition){ this.sqlPart = condition; } @@ -41,4 +42,15 @@ public class IllegalSQLObjectViolation implements Violation { return this.sqlPart; } + + public String getMessage() { + return message; + } + + + public void setMessage(String message) { + this.message = message; + } + + } diff --git a/src/main/java/com/alibaba/druid/wall/violation/SyntaxErrorViolation.java b/src/main/java/com/alibaba/druid/wall/violation/SyntaxErrorViolation.java index 31f59d16da..97294b152d 100644 --- a/src/main/java/com/alibaba/druid/wall/violation/SyntaxErrorViolation.java +++ b/src/main/java/com/alibaba/druid/wall/violation/SyntaxErrorViolation.java @@ -41,4 +41,11 @@ public class SyntaxErrorViolation implements Violation { return sql; } + public String getMessage() { + if (exception == null) { + return null; + } + + return exception.getMessage(); + } } From 8b6672debf300849ea36f637eafa2f9e66afb105 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 31 Mar 2013 23:14:57 +0800 Subject: [PATCH 2/2] gpg.skip --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 427a30019d..8385cae505 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 3.1.1.RELEASE 4.11 - false + true UTF-8 1.6