DictQueryBlackListHandler.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package org.jeecg.modules.system.security;
  2. import org.jeecg.common.constant.CommonConstant;
  3. import org.jeecg.common.constant.SymbolConstant;
  4. import org.jeecg.common.util.oConvertUtils;
  5. import org.jeecg.common.util.security.AbstractQueryBlackListHandler;
  6. import org.springframework.stereotype.Component;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. /**
  10. * 字典组件 执行sql前校验 只校验表字典
  11. * dictCodeString格式如:
  12. * table,text,code
  13. * table where xxx,text,code
  14. * table,text,code, where xxx
  15. *
  16. * @Author taoYan
  17. * @Date 2022/3/23 21:10
  18. **/
  19. @Component("dictQueryBlackListHandler")
  20. public class DictQueryBlackListHandler extends AbstractQueryBlackListHandler {
  21. @Override
  22. protected List<QueryTable> getQueryTableInfo(String dictCodeString) {
  23. if (dictCodeString != null && dictCodeString.indexOf(SymbolConstant.COMMA) > 0) {
  24. String[] arr = dictCodeString.split(SymbolConstant.COMMA);
  25. if (arr.length != 3 && arr.length != 4) {
  26. return null;
  27. }
  28. String tableName = getTableName(arr[0]);
  29. QueryTable table = new QueryTable(tableName, "");
  30. // 无论什么场景 第二、三个元素一定是表的字段,直接add
  31. table.addField(arr[1].trim());
  32. String filed = arr[2].trim();
  33. if (oConvertUtils.isNotEmpty(filed)) {
  34. table.addField(filed);
  35. }
  36. List<QueryTable> list = new ArrayList<>();
  37. list.add(table);
  38. return list;
  39. }
  40. return null;
  41. }
  42. /**
  43. * 取where前面的为:table name
  44. *
  45. * @param str
  46. * @return
  47. */
  48. private String getTableName(String str) {
  49. String[] arr = str.split("\\s+(?i)where\\s+");
  50. // sys_user , (sys_user), sys_user%20, %60sys_user%60 issues/4393
  51. String reg = "\\s+|\\(|\\)|`";
  52. return arr[0].replaceAll(reg, "");
  53. }
  54. }