基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理

news2024/11/25 3:01:35

      nbcio-boot因为升级mybatis-plus到3.5.3.1和JSQLParser 到4.6,引起的在线报表配置报错。

         导致主页显示不出任务东西。

sql语句如下:

     select DATE_FORMAT(c.days, '%Y%m') x, count(num) y from (select DATE_FORMAT(b.DEPLOY_TIME_, '%Y-%m-%d') AS days , count(a.KEY_) as num from (select DEPLOYMENT_ID_,KEY_,MAX(VERSION_) from act_re_procdef GROUP BY KEY_) a LEFT JOIN act_re_deployment b on a.DEPLOYMENT_ID_ = b.ID_ GROUP BY DATE_FORMAT(b.DEPLOY_TIME_, '%Y-%m-%d') ORDER BY b.DEPLOY_TIME_) c GROUP BY x ORDER BY x desc

   在没有升级前是正常的,升级后出现问题,报错如下:

  • java.lang.ClassCastException: net.sf.jsqlparser.statement.select.SubSelect cannot be cast to net.sf.jsqlparser.schema.Table
    at org.jeecg.modules.online.config.c.a.a(OnlReportQueryBlackListHandler.java:118)
    at org.jeecg.modules.online.config.c.a.getQueryTableInfo(OnlReportQueryBlackListHandler.java:88)
    at org.jeecg.common.util.security.AbstractQueryBlackListHandler.isPass(AbstractQueryBlackListHandler.java:44)
    at org.jeecg.modules.online.cgreport.service.a.b.executeSelectSqlRoute(OnlCgreportAPIService.java:90)
    at org.jeecg.modules.online.cgreport.service.a.b.getData(OnlCgreportAPIService.java:80)
    at org.jeecg.modules.online.cgreport.service.a.b.getDataById(OnlCgreportAPIService.java:54)
    at org.jeecg.modules.online.cgreport.a.a.b(OnlCgreportAPI.java:207)
    at org.jeecg.modules.online.cgreport.a.a.a(OnlCgreportAPI.java:92)
    at org.jeecg.modules.online.cgreport.a.a$$FastClassBySpringCGLIB$$a976ee88.invoke()
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
    at org.jeecg.common.aspect.PermissionDataAspect.arround(PermissionDataAspect.java:66)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

      看错误是OnlReportQueryBlackListHandler里面的错误,但因为online部分源代码没有开放,所以也看不到哪里出现错误了。

      开始以为是jsqlparser的问题,到官方jsqlparser的相关资料与github上看也没看出什么,后来看jeecg-boot官方有相关的资料。

      后面根据网上资料,应该还是新的安全黑名单机制出现了问题了,所以在AbstractQueryBlackListHandler类里的isPass修改如下:

/**
     * 校验sql语句 成功返回true
     * @param sql
     * @return
     */
    public boolean isPass(String sql) {
        //List<QueryTable> list = this.getQueryTableInfo(sql.toLowerCase());
    	List<QueryTable> list = null;
        //【jeecg-boot/issues/4040】在线报表不支持子查询,解析报错 #4040
        try {
            list = this.getQueryTableInfo(sql.toLowerCase());
        } catch (Exception e) {
            log.warn("校验sql语句,解析报错:{}",e.getMessage());
        }

        if(list==null){
            return true;
        }
        log.info("--获取sql信息--", list.toString());
        boolean flag = true;
        for (QueryTable table : list) {
            String name = table.getName();
            String fieldString = ruleMap.get(name);
            // 有没有配置这张表
            if (fieldString != null) {
                if ("*".equals(fieldString) || table.isAll()) {
                    flag = false;
                    log.warn("sql黑名单校验,表【"+name+"】禁止查询");
                    break;
                } else if (table.existSameField(fieldString)) {
                    flag = false;
                    break;
                }

            }
        }
        return flag;
    }

  正常后显示如下主页:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2传值方式总结 (十一种方法)

一.父传子传递 &#xff08;1&#xff09;在父组件的子组件标签上绑定一个属性&#xff0c;挂载要传输的变量 &#xff08;2&#xff09;在子组件中通过props来接受数据&#xff0c;props可以是数组也可以是对象&#xff0c;接受的数据可以直接使用 props: [“属性 名”] prop…

golang 自定义exporter - 服务连接数 portConnCount_exporter 导出器

需求&#xff1a; 1、计算当前6379 、3306 服务的连接数 2、可prometheus 语法查询 下面代码可直接使用&#xff1a; 注&#xff1a; 1、windows 与linux的区分 第38行代码 localAddr : fields[1] //windows为fields[1] &#xff0c; linux为fields[3] 2、如需求 增加/修改/删除…

【山河送书第六期】:《码上行动:零基础学会Python编程( ChatGPT版)》参与活动,送书两本!!

《码上行动:零基础学会Python编程( ChatGPT版》 前言内容提要本书亮点购买链接参与方式往期赠书回顾&#xff1a; 前言 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于数据科学和人工智能领域的发展&#xff0c;使得 Python 变得异…

Openlayers实战:多数据分散聚合

在飞机、轮船等地图显示的应用中,很多时候会用到数据聚合,Openlayers中提供了Cluster这个API ,他作为souce的一部分,设定distance值,如果2个点的间距小于 distance 所设置的数时,就会以聚合的方式显示。从而解决了数据淤积显示的状态,非常实用。 效果图 源代码 /* * @…

【基础IO】动静态库 {动静态库的创建和使用;动态库的加载;默认优先使用动态链接;为什么要有库;动态链接的优缺点;静态链接的优缺点;一些有趣的库}

动静态库 一、静态库(.a) 1.1 如何创建静态库&#xff1f; 编写源文件与头文件。注意&#xff1a;库的源文件没有main函数&#xff01; 将所有的源文件编译生成目标文件。(如果只提供.h和.o给用户&#xff0c;用户也可以成功编译运行。但这样的做法太过麻烦&#xff0c;且容易…

8个值得收藏的在线3D建模工具

如今&#xff0c;许多设计师、艺术家和建筑师尝试学习进行 3D 建模来表达他们的想法。 但 3D 建模并不总是看起来那样。 我们所有人都很难找到合适的工具&#xff0c;尤其是在学习阶段。 但不要害怕&#xff01; 你可以学习仅使用浏览器进行建模。 有许多基于浏览器的 3D 建模…

Scala(第六章 面向对象)

文章目录 6.1 Scala包 6.1.1 包的命名6.1.2 包说明&#xff08;包语句&#xff09;6.1.3 包对象6.1.4 导包说明 6.2 类和对象 6.2.1 定义类6.2.2 属性 6.3 封装 6.3.1 访问权限6.3.2 方法6.3.3 创建对象6.3.4 构造器6.3.5 构造器参数 6.4 继承与多态6.5 抽象类 6.5.1 抽象属性和…

实例034 直接在窗体上绘图

实例说明 含有Graphics对象的控件都能够在其上进行绘图&#xff0c;很多软件就是通过Graphics对象来美化程序的主界面&#xff0c;因为窗体中含有Graphics对象&#xff0c;所以可以将窗体看作一个大画板&#xff0c;一个可以在上面绘图的特殊控件。本例设计了一个简单的绘图软…

Pycharm 双击启动失败?

事故 双击 Pycharm 后&#xff0c;出现加载工程&#xff0c;我不想加载这个工程&#xff0c;就点击了弹出的 cancle 取消按钮。然后再到桌面双击 Pycharm 却发现无法启动了。哪怕以管理员权限运行也没用&#xff0c;就是不出界面。 原因未知 CtrlshiftESC 打开后台&#xff…

什么是埋阻埋容工艺?

PCB埋阻埋容工艺是一种在PCB板内部埋入电阻和电容的工艺。通常情况下&#xff0c;PCB上电阻和电容都是通过贴片技术直接焊接在板面上的&#xff0c;而埋阻埋容工艺则将电阻和电容嵌入到PCB板的内部层中&#xff0c;这种印制电路板&#xff0c;其自下而上依次包括第一介电层&…

uniapp支付宝微信支付功能实现

大纲&#xff1a; 具体实现逻辑如下&#xff1a; 页面初始化时&#xff0c;通过onLoad方法获取传入的钱包(wallet)信息。 用户输入充值金额&#xff0c;使用watch监听输入值的变化&#xff0c;并更新选中的充值金额选项。判断金额是否大于0&#xff0c;若是小于0&#xff0c;则…

【对于一维信号的匹配】对一个一维(时间)信号y使用自定义基B执行匹配追踪(MP)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

43.字符串相乘

目录 一、题目 二、代码 一、题目 43. 字符串相乘 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public: string addStrings(string num1, string num2)//求两个字符串相加 {int end1 num1.size() - 1;int end2 num2.size() - 1;int next 0;//进位…

分布式定时任务框架Quartz总结和实践(1)

一、概述 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个&#xff0c;百个&#xff0c;甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或…

springboot mybatis鲜花商城平台

伴随着互联网技术的进步&#xff0c;各种电商平台也如雨后 春笋不断涌现。一个好的电商平台应该具有用户体验度高&#xff0c;用户信息安全等特点, 从而可以满足更多的用户需求。现有的电商平台虽然在不断完善&#xff0c;但仍然存在着 不少问题。本设计是一个基于java的spring…

租赁OLED透明屏:打造独特商业体验的智慧选择

近年来&#xff0c;OLED透明屏技术在商业领域中迅速崛起&#xff0c;其高透明度和卓越的图像质量为商家创造了全新的展示方式。 租赁OLED透明屏作为一种智慧选择&#xff0c;不仅能提升品牌形象和吸引力&#xff0c;还能创造与众不同的视觉体验。 对此&#xff0c;尼伽将和大…

【Eureka技术指南】「SpringCloud」从源码层面让你认识Eureka工作流程和运作机制(上)

前言介绍 了解到了SpringCloud&#xff0c;大家都应该知道注册中心&#xff0c;而对于我们从过去到现在&#xff0c;SpringCloud中用的最多的注册中心就是Eureka了&#xff0c;所以深入Eureka的原理和源码&#xff0c;接下来我们要进行讲解下eureka的源码分析&#xff0c;由此应…

Oracle数据迁移

问题描述&#xff1a; oracle数据库的所有表结构、数据、索引等需要需从测试库迁移到正式库。 解决步骤&#xff1a; oracle数据库迁移&#xff0c;主要通过expdp从测试库所在的源服务器将指定的数据表或数据源导出为一个或多个数据文件&#xff08;.dmp文件&#xff09;&…

第五届太原理工大学新生赛(决赛)题解

题解&#xff09; <font colorred>第五届太原理工大学新生赛&#xff08;决赛&#xff09;:star:A.810975:star2:<font colorgreen>题意:cherries:<font colorred>解决思路:pear:代码 :star:<font colorpink>B.hammer玩游戏:star2:<font colorgreen…

STM32--综述

文章目录 前言STM32简介STM32F103C8T6系统结构Keil软件安装注意事项新建工程操作流程 前言 本专栏将学习B站江协科技的STM32入门教程&#xff0c;通过自身理解和对老师的总结所写的博客专栏。 STM32简介 STM32是意法半导体&#xff08;STMicroelectronics&#xff09;公司推…