Bläddra i källkod

fixed github issues/3016

hubin 4 år sedan
förälder
incheckning
5e6b1f4f35

+ 12 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -327,13 +327,22 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
             final SqlKeyword mode = isAsc ? ASC : DESC;
             final SqlKeyword mode = isAsc ? ASC : DESC;
             appendSqlSegments(ORDER_BY, columnToSqlSegment(column), mode);
             appendSqlSegments(ORDER_BY, columnToSqlSegment(column), mode);
             if (ArrayUtils.isNotEmpty(columns)) {
             if (ArrayUtils.isNotEmpty(columns)) {
-                for (R c : columns) {
-                    appendSqlSegments(ORDER_BY, columnToSqlSegment(c), mode);
-                }
+                Arrays.stream(columns).forEach(c -> appendSqlSegments(ORDER_BY,
+                    columnToSqlSegment(columnSqlInjectFilter(c)), mode));
             }
             }
         });
         });
     }
     }
 
 
+    /**
+     * 字段 SQL 注入过滤处理,子类重写实现过滤逻辑
+     *
+     * @param column 字段内容
+     * @return
+     */
+    protected R columnSqlInjectFilter(R column) {
+        return column;
+    }
+
     @Override
     @Override
     public Children having(boolean condition, String sqlHaving, Object... params) {
     public Children having(boolean condition, String sqlHaving, Object... params) {
         return maybeDo(condition, () -> appendSqlSegments(HAVING,
         return maybeDo(condition, () -> appendSqlSegments(HAVING,

+ 6 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/QueryWrapper.java

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 
 import java.util.Map;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -96,6 +97,11 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return sqlSelect.getStringValue();
         return sqlSelect.getStringValue();
     }
     }
 
 
+    @Override
+    protected String columnSqlInjectFilter(String column) {
+        return StringUtils.replaceBlank(column);
+    }
+
     /**
     /**
      * 返回一个支持 lambda 函数写法的 wrapper
      * 返回一个支持 lambda 函数写法的 wrapper
      */
      */

+ 5 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java

@@ -91,6 +91,11 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         return typedThis;
         return typedThis;
     }
     }
 
 
+    @Override
+    protected String columnSqlInjectFilter(String column) {
+        return StringUtils.replaceBlank(column);
+    }
+
     /**
     /**
      * 返回一个支持 lambda 函数写法的 wrapper
      * 返回一个支持 lambda 函数写法的 wrapper
      */
      */

+ 21 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/StringUtils.java

@@ -540,8 +540,8 @@ public final class StringUtils {
      * StringUtils.equals("abc", "ABC") = false
      * StringUtils.equals("abc", "ABC") = false
      * </pre>
      * </pre>
      *
      *
-     * @param cs1  第一个字符串, 可为 {@code null}
-     * @param cs2  第二个字符串, 可为 {@code null}
+     * @param cs1 第一个字符串, 可为 {@code null}
+     * @param cs2 第二个字符串, 可为 {@code null}
      * @return {@code true} 如果两个字符串相同, 或者都为 {@code null}
      * @return {@code true} 如果两个字符串相同, 或者都为 {@code null}
      * @see Object#equals(Object)
      * @see Object#equals(Object)
      */
      */
@@ -567,4 +567,23 @@ public final class StringUtils {
         }
         }
         return true;
         return true;
     }
     }
+
+    /**
+     * 字符串去除空白内容:
+     * \n 回车
+     * \t 水平制表符
+     * \s 空格
+     * \r 换行
+     *
+     * @param str 字符串
+     * @return
+     */
+    public static String replaceBlank(String str) {
+        if (null != str) {
+            Pattern pattern = Pattern.compile("\\s*|\t|\r|\n");
+            Matcher matcher = pattern.matcher(str);
+            return matcher.replaceAll("");
+        }
+        return null;
+    }
 }
 }