目录
1.下载RDP源码-启动(不做详解)【RDP-SERVER】
3.接入T2AdminToken校验+租户系统(以网格报表为例)
集成实现到此结束,仅探索和提供集成思路分析,如有集成需求可参考此文章!!!
需求分析和实现方式
需求
- 需要实现T2Admin以远程菜单的形式打开RDP报表设计页面;
- RDP页面需要登录(登录逻辑与T2Admin一样)可访问;
实现
- 下载RDP源码本地启用
- 改进源代码去除原本的菜单角色信息
- 添加自己的全局授权检查(token校验)
集成教程
1.下载RDP源码-启动(不做详解)【RDP-SERVER】
- 修改pom中导入JBarcode包方式
<dependency>
<groupId>org.jbarcode</groupId>
<artifactId>JBarcode</artifactId>
<scope>system</scope>
<version>${pom.basedir}/lib/jbarcode-0.2.8.jar</version>
</dependency>
打包方式修改不做讲解
- 导入mysql初始脚本
- 修改application数据库、redis、文件存储路径等其他配置
-
启动
登录账号:admin,密码:admin
2.添加远程菜单-报表管理-网格报表
http://127.0.0.1:8080/index.html#modules/rdp/list.html
我们只需要中间这一块,外部框架用本身系统的。
这一块使用iframe引入的,就非常好办就可以拿出中间这一块的网页地址。
http://127.0.0.1:8080/modules/rdp/list.html
添加远程菜单如下:
打开菜单
可以看到这个地址不需要权限可以直接访问;【页面样式可以修改-暂时不调整】
3.接入T2AdminToken校验+租户系统(以网格报表为例)
实现每个企业都可以维护自己的报表数据;
并且需要登录才可访问,如果不登陆将以匿名用户身份记录数据(方便维护);
- 将T2Admin的登录验证过滤器AuthFilter以及全局异常等添加到【RDP-SERVER】中
- token校验已经完成-如果没有用户信息就是匿名,现在需要将用户信息利用窗口通信机制传输到iframe框架中并且将所有涉及数据区分到租户;以下部分将进入难度,需要阅读RDP的源码;- 仅仅讲解修改部分 - 原理自行研究!
- 编写一个js工具类,监听父窗口的消息,也可写一些工具封装方法。
再全局或者局部页面中引入此js;
并且修改所有的ajax请求带上token;
页面数据请求CRUD都带上clientId参数(租户);
以下列举需要修改的js(修改详细内容请参考源码-这里只提供思路)
src\main\resources\statics\js\modules\rdp\list.js(报表列表展示页)
引入t2admin.js,请求添加token,报表预览页面跳转加上client_id参数(报表数据集会用到此参数)
src\main\resources\statics\rdp\common\sourcejs\charts.js(加载图表数据)
引入t2admin.js,请求添加token
src\main\resources\statics\rdp\common\all\all.min.js(公共js)
引入t2admin.js
src\main\resources\statics\rdp\common\sourcejs\dataReport.js(报表设计页面需要)
引入t2admin.js,请求添加token
src\main\resources\statics\rdp\js\loadCharts.js
引入t2admin.js,请求添加token
src\main\resources\statics\rdp\js\show.js(报表预览页)
引入t2admin.js,请求添加token
src\main\resources\statics\rdp\common\sourcejs\main.js
请求添加token,预览url添加client_id参数(报表数据集会用到此参数)
src\main\resources\statics\ser\js\getConfig.js (数据源配置)
请求添加token,[数据表添加client_id]
src\main\resources\statics\js\common-config.js
请求添加token
src\main\resources\statics\rdp\common\sourcejs\dataSets.js (数据集)
请求添加token, [数据表添加client_id]
- 修改后端接口都带上clientId(租户信息)
因为加上了租户这一级,文件存储和查询都需要添加租户目录,每一个租户不同的目录
添加一个工具类处理对接问题。
以下列举需要修改的Api接口类
src\main\java\io\report\modules\rdp\controller\RdpController.java
主要修改内容:ServerUtil.getDataPath => T2AdminUtil.getDataPath
重写查询保存接口(需要关联数据库)!
我们需要另外写一个报表文件记录表,用于存储文件记录;(RDP直接读取的文件,无表记录)
报表的CRUD都需要与表相关联;表结构如下:
还需要一个ID的目的是为了文件迁移,不同租户文件的UUID名称可相同;
通过clientId+uuid唯一区分文件;
src\main\java\io\report\modules\bddp\controller\BddpShowController.java
修改内容:ServerUtil.getDataPath => T2AdminUtil.getDataPath
src\main\java\io\report\modules\rdp\controller\RdpPageController.java
修改内容:预览路径处理
src\main\java\io\report\modules\rdp\service\impl\DesignServiceImpl.java
修改内容:数据源查询修改需要带上租户信息--新增表字段
src\main\java\io\report\modules\rdp\controller\RdpPubController.java
修改内容:路径处理
src\main\java\io\report\modules\ser\excontroller\ExDataSourceController.java
修改内容: 查询和修改关联client_id(租户)
- RDP使用shiro框架进行登录授权校验,放开所有路径校验
4.集成效果
集成页面已接受到父窗口的用户信息
新建报表列表--已经区分租户,只能查出当前租户的信息
还发现了一些问题已经做了以下细节的修改。
数据源集成页面
报表设计页面
集成实现到此结束,仅探索和提供集成思路分析,如有集成需求可参考此文章!!!
源码参考地址
https://github.com/tangzhangss/T2Admin/tree/master/api/common-report-rdp