diff --git a/pom.xml b/pom.xml index 6adc256b20..ff73a6157b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba druid - 1.1.7-preview_0 + 1.1.7-preview_10 jar druid diff --git a/src/main/java/com/alibaba/druid/wall/WallProvider.java b/src/main/java/com/alibaba/druid/wall/WallProvider.java index e80e8bd9a3..7bba3cb685 100644 --- a/src/main/java/com/alibaba/druid/wall/WallProvider.java +++ b/src/main/java/com/alibaba/druid/wall/WallProvider.java @@ -31,8 +31,10 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHintStatement; import com.alibaba.druid.sql.parser.Lexer; @@ -48,6 +50,9 @@ import com.alibaba.druid.wall.spi.WallVisitorUtils; import com.alibaba.druid.wall.violation.ErrorCode; import com.alibaba.druid.wall.violation.IllegalSQLObjectViolation; import com.alibaba.druid.wall.violation.SyntaxErrorViolation; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeanWrapper; +import org.springframework.beans.BeanWrapperImpl; public abstract class WallProvider { @@ -686,8 +691,16 @@ public abstract class WallProvider { Set updateCheckColumns = config.getUpdateCheckTable(tableName); if (updateCheckColumns != null && updateCheckColumns.size() > 0) { updateCheckHandlerEnable = true; - break; } + for(SQLUpdateSetItem item : ((SQLUpdateStatement) stmt).getItems()){ + SQLExpr column = item.getColumn(); + BeanWrapper beanWrapper = new BeanWrapperImpl(column); + Object name = beanWrapper.getPropertyValue("name"); + if(name != null && updateCheckColumns.contains(name.toString().toLowerCase())){ + updateCheckHandler.check(tableName, name.toString().toLowerCase(), item.) + } + } + } } } @@ -706,6 +719,9 @@ public abstract class WallProvider { sqlStat = addWhiteSql(sql, tableStat, context.getFunctionStats(), syntaxError); } } + if(sqlStat == null && updateCheckHandlerEnable){ + sqlStat = new WallSqlStat(tableStat, context.getFunctionStats(), syntaxError); + } Map tableStats = null; Map functionStats = null;