content: package com.xiliu.common.utils;
  
  import com.github.pagehelper.PageHelper;
  import com.xiliu.common.page.PageDomain;
  import com.xiliu.common.page.TableSupport;
  
  /**
   * @author xiliu
   * @description 分页工具类
   * @date 2022/7/19
   */
  public class PageUtils extends PageHelper {
  
      /**
       * 仅支持字母、数字、下划线、空格、逗号、小数点（支持多个字段排序）
       */
      public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";
  
      public static void startPage() {
          PageDomain pageDomain = TableSupport.buildPageRequest();
          Integer pageNum = pageDomain.getPageNum();
          Integer pageSize = pageDomain.getPageSize();
          String orderBy = escapeOrderBySql(pageDomain.getOrderBy());
          Boolean reasonable = pageDomain.getReasonable();
          PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
      }
  
      /**
       * 清理分页的线程变量
       */
      public static void clearPage() {
          PageHelper.clearPage();
      }
  
      /**
       * 检查字符，防止注入绕过
       */
      public static String escapeOrderBySql(String value) {
          if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
          {
              throw new RuntimeException("参数不符合规范，不能进行查询");
          }
          return value;
      }
  
      /**
       * 验证 order by 语法是否符合规范
       */
      public static boolean isValidOrderBySql(String value) {
          return value.matches(SQL_PATTERN);
      }
  }
  