反馈已提交

网络繁忙

远程设计

  • 文档创建者:文档助手1
  • 编辑次数:47次
  • 最近更新:Leo.Tsai 于 2022-10-25
  • 1. 概述

    1.1 版本

    报表服务器版本功能变动
    11.0.9新增「限制访问IP」配置,详情见本文第 6 节

    1.2 应用场景

    FineReport 报表正式工程一般都部署在远程服务器上,当需要对工程里面的模板进行设计修改时,可直接通过本地设计器连接到远程服务器上的工作目录进行模板设计。

    1.3 功能简介

    在设计器菜单栏「文件>切换工作目录」处,支持切换到「远程服务器」。输入服务器信息和报表工程中的用户账号密码即可连接远程服务器。

    报表工程的超级管理员默认可远程连接报表工程,非超管用户默认不允许远程连接报表工程,必须由超管用户统一分配权限后方可远程连接。

    2. 远程设计前提条件

    2.1 远程设计功能点

    场景描述:远程设计连接前,需要先确认远程的工程是否支持远程设计功能点。

    解决方案:登录数据决策系统,查看http://IP:port/webroot/decision/remote/design/vt的返回值,若返回{"data":"success"},代表支持,否则请联系销售增购远程设计功能点。

    2.2 远程设计权限

    场景描述:非超管账户默认没有远程设计权限,远程设计连接失败。

    解决方案:超管登录数据决策系统,查看是否为用户分配了远程设计的相关权限,详情请参见本文第四章。

    2.3 JAR包版本

    场景描述:本地设计器版本和远程服务器工程的JAR包版本不一致,会导致很多问题。

    解决方案:远程连接时,若版本不匹配,会提示版本不一致,远程设计时部分功能将受影响。建议及时更新,保证服务器和设计器版本一致。

    3. 配置远程服务器

    打开本地设计器,点击「文件>切换工作目录>其它」,可新建远程服务器目录。如下图所示:

    3.1 远程服务器

    主机位置是报表服务器工程的主机名、端口、Web应用、Servlet的组合。

    主机位置是进入报表服务器对应的数据决策系统的 URL,形如http://IP:port/webroot/decision

    1)用户可填写主机名、端口、Web应用、Servlet后自动生成主机位置,或输入主机位置后自动生成其他四项。

    2)若报表工程配置了外网映射,或者配置了短域名访问(形如http://IP,或http://域名/decision)。

    填写「主机位置」信息后,需要确认「Servlet」信息是否为空,若为空需要手动填写。

    管理员登录数据决策系统,点击「管理系统>系统管理>常规」,即可查看本工程的Servlet路径名,一般为decision,如下图所示:

    3.2 启用https

    当远程报表服务器使用了 https 认证时,登录到该远程服务器时,需要勾选启用https,然后再填写详细信息。

    • 如果服务器所用证书是从 CA 机构正式签发,远程设计时一般无需填写证书路径和https密钥。

    • 如果服务器所用证书为自签名证书,则需要填写证书路径和https密钥。

    注1:若启用 https 或修改 https 配置(证书路径、https 密钥),必须重启设计器才能生效。

    注2:证书路径和 https 密钥如何生成可参考: 配置SSL  

    证书路径:

    点击右侧按钮选择证书在本地的位置,根据实际情况选择 .keysotre 或者 .jks 等其他证书。

    jks 证书可以复制到本地,对应的证书路径可以为本地路径,密钥使用 jks 生成时使用的密钥。

    证书和秘钥可从 Tomcat 根目录/conf/server.xml 文件的 SSLHostConfig 标签中找到,certificateKeystoreFile 是 jks 证书存储路径,certificateKeystorePassword 是 jks 证书密钥。

    https 密钥:

    填写 ssl 认证中设置的 keystore 密码。

    3.3 决策系统账号

    连接远程服务器时,输入数据决策系统中的用户名、密码,验证通过即可切换到相应的远程服务器。

    登录优先级说明:远程设计登录的用户,按照浏览器平台登录的权限进行继承。例如:Web 端登录是 a 用户,远程设计是 b 用户,预览时按照 a 用户处理。

    1)登录验证

    若用户名密码输入错误,或输入被禁用的平台用户账号密码,点击「测试连接」时,跳出提示「连接失败,远程设计用户名密码错误,错误代码11300105」,如下图所示:

    2)密码策略

    除验证用户名密码之外,远程设计切换时还支持登录锁定、弱密码校验、定期修改密码、初始密码强制更新等密码安全策略。

    开启的功能效果
    登录锁定

    远程设计中进行「测试连接」或「目录切换」时,如果密码错误,将对错误次数计数。

    当错误次数达到系统设定锁定次数时,弹窗显示:密码错误次数已达上限,已被锁定 XX 分钟,请联系管理员或在决策平台中修改密码

    其中密码错误次数和锁定时间,在决策平台中设置。且错误次数与平台累计计数,即平台输入错误 i 次,此处输入错误 j 次,总计输入错误 i+j 次。

    点击「修改密码」超链接即可跳转到平台登录入口修改密码。

    密码强度限制

    参见:密码策略设置 第 4 章

    数据决策系统中若开启了「密码强度限制」功能,远程连接时,输入用户名密码,密码正确但不符合「密码强度限制」,弹窗显示:当前密码不符合密码强度要求,请联系管理员或在决策登平台中修改密码

    点击「修改密码」超链接即可跳转到平台登录入口修改密码。

    密码定期更新

    参见:密码策略设置 第 3 章

    数据决策系统中若开启「密码定期更新」功能,更新周期到后用户忘记更新密码,远程连接时,输入用户名密码,弹窗显示:当前密码已失效,请联系管理员或在决策登平台中修改密码

    点击「修改密码」超链接即可跳转到平台登录入口修改密码。

    初始密码强制修改

    参见:密码策略设置 第 6 章

    数据决策系统中若开启「初始密码强制修改」功能,远程连接时,用户输入用户名密码,若密码正确且为初始密码,弹窗显示:当前密码已失效,请联系管理员或在决策登平台中修改密码

    点击「修改密码」超链接即可跳转到平台登录入口修改密码。

    4. 分配远程设计权限

    报表工程的超级管理员默认可远程连接报表工程,非超管用户默认不允许远程连接报表工程,必须由超管用户统一分配权限后方可远程连接。

    远程设计权限分为三种:

    注:本文仅介绍权限分配的功能,超管为用户分配远程设计权限的具体操作示例请参见:给用户分配远程设计权限示例

    权限类型简介注意事项
    远程连接权限将远程连接的权限分配给用户,使得用户可以通过本地设计器远程连接服务器工程

    1)该权限仅支持超管用户分配

    2)支持按照用户和角色进行分配,不支持按照部门职务分配

    3)权限分配操作需在设计器端进行

    远程设计模板权限将指定模板的编辑设计权限分配给不同的用户,使不同用户只能编辑其职责范围内的模板

    1)该权限仅支持超管用户分配

    2)仅支持分配给有「远程连接权限」的用户和角色,不支持分配给无「远程连接权限」的用户和角色,不支持按照部门职务分配

    3)权限分配操作需在设计器端进行

    数据连接权限分配普通用户在制作报表时可以使用的数据连接权限,限制用户可调用的数据连接和服务器数据集范围

    1)该权限支持管理员用户分配

    2)支持按照用户、部门、角色进行分配

    3)权限分配操作需在数据决策系统中进行

    4.1 远程连接权限

    超管使用本地设计器远程连接报表服务器后。点击「服务器>远程设计权限管理」,超管可为某个用户/某个角色分配远程连接权限。

    点击「+」,勾选用户/角色,点击「确定」,即代表将用户/角色添加到了支持远程设计的用户列表中。

    若无远程连接权限的用户试图远程连接该工程,提示「连接失败,远程设计无权限,错误代码:11300112」。如下图所示:

    4.2 远程设计模板权限

    超管使用本地设计器远程连接报表服务器后。点击「服务器>远程设计权限管理」,超管可为有远程连接权限的用户/角色分配模板的编辑设计权限。

    选中用户/角色,勾选需要分配给该用户编辑管理的模板和文件夹,点击「确定」,即代表将指定模板的编辑设计权限分配给该用户/角色。

    该用户远程连接工程后,能看到的模板只有自己有权限的模板。

    4.3 数据连接权限

    该权限需在数据决策系统中分配,详情请参见:数据连接使用权限服务器数据集使用权限

    若模板中使用了对应的数据连接/服务器数据集,则必须要为用户配置相应的数据连接使用权限和服务器数据集使用权限,否则编辑后无法保存模板。

    1)开启数据连接控制

    超级管理员登录远程报表工程的数据决策系统,点击「管理系统>权限管理>全局设置」,开启「数据连接控制」按钮,点击「保存」。如下图所示:

    2)分配数据连接使用权限

    管理员登录远程报表工程的数据决策系统,点击「管理系统>权限管理>普通权限配置」。 

    选择权限载体「部门/角色/用户」,为其分配数据连接使用权限和服务器数据集使用权限,如下图所示:

    普通用户切换至远程服务器下,若管理员没有为其分配数据连接权限,在制作报表时,将看不到数据连接,无法使用对应数据库的数据,如下图所示:

    若远程连接时,保存/预览的模板中存在无权限的数据连接/服务器数据集,则报错「保存失败,当前操作者缺失X个数据连接权限/服务器数据集权限:XXXX」,如下图所示:


    5. 远程连接效果

    5.1 超级管理员

    超级管理员使用设计器远程连接服务器成功后。

    1)远程设计时,不支持在设计器端使用「插件管理」功能 ,必须在数据决策系统中管理插件,详情请参见:服务器插件管理

    2)远程设计时,在菜单栏「服务器」新增「远程设计权限管理」,可通过该功能为普通用户配置远程设计权限。

    5.2 非超管用户

    非超管用户使用设计器远程连接服务器成功后。

    1)远程设计时,在设计器菜单栏无「服务器」Tab,对应功能均不支持设置。


    2)远程设计时,在文件区显示用户有权限使用的模板。

    代表用户有该文件夹和文件夹下所有模板的使用权限。

    代表用户仅有该文件夹中部分模板的使用权限,不完全拥有该文件夹的使用权限。

    新建文件夹:用户只可在完全有权限的文件夹下新建文件夹。不可在根目录/不完整权限文件夹中新建文件夹,提示「没有权限」。

    删除文件夹:用户只可删除完全有权限的文件夹,文件夹下的模板将会一并被删除。不可删除不完整权限的文件夹,提示「没有权限」。

    重命名文件夹:用户只可重命名完全有权限的文件夹。不可重命名不完整权限的文件夹,提示「没有权限」。

    新建模板:用户新建的模板,只能保存在完全有权限的文件夹下。不可保存在根目录/不完整权限文件夹中,提示「没有权限!」。

    若用户想将模板保存到根目录reportlets下,需要拥有所有目录文件夹和模板的使用权限,建议用户把自己权限的模板放到一个文件夹中,只开放一个文件夹的权限就行。

    3)若多个用户拥有同一文件夹的权限,如果用户 A 和用户 B 同时连接远程目录,A 删除了模板 M,用户 B 在不知情的情况下打开 M 模板,会提示模板被删除,无法打开,刷新模板面板后可以看到该模板已经不存在。

    4)无论用户有没有数据连接的使用、管理权限,远程连接时,非超管用户在设计器端不可「定义数据连接」。


    5)非超管用户远程设计时,所有涉及选择数据连接的地方,用户只能使用自己权限下的数据连接,比如添加数据集时「数据库查询」、「存储过程」等。

    6. 限制访问IP

    问题背景:

    针对 channel 接口反序列化漏洞对远程设计可能的影响,可通过配置限制访问 IP 来防止恶意输入行为

    解决方案:

    修改 FineDB 中 FINE_CONF_ENTITY 表中相关字段,修改表的方法见:fine_conf_entity可视化配置

    具体设置如下:

    1)将字段 RemoteConnectionConfig.enableWhitelistVerify 值设置为:true

    2)然后给字段 RemoteConnectionConfig.ipWhiteList 赋值,值为 IP 段,且为数组形式


    image-2022-09-30-13-53-20-748.png

    设置好后,除配置的 IP 外,其他 IP 均不可访问远程设计,不在白名单的 IP 访问时会弹出如下报错:

    1665719167129814.png

    报错对应的堆栈信息如下:

    com.fr.workspace.engine.exception.RemoteDesignUnknownException: java.lang.reflect.UndeclaredThrowableException
        at com.fr.workspace.engine.convert.UnknownErrorConverter.convert(UnknownErrorConverter.java:17)
        at com.fr.workspace.engine.convert.UnknownErrorConverter.convert(UnknownErrorConverter.java:13)
        at com.fr.workspace.engine.convert.ExceptionConverter.convert(ExceptionConverter.java:34)
        at com.fr.env.handler.impl.UnexpectedHandler.handle(UnexpectedHandler.java:22)
        at com.fr.env.handler.impl.UnexpectedHandler.handle(UnexpectedHandler.java:16)
        at com.fr.env.handler.WorkspaceExceptionHandler.handle(WorkspaceExceptionHandler.java:58)
        at com.fr.env.handler.WorkspaceExceptionHandler.handleInTest(WorkspaceExceptionHandler.java:94)
        at com.fr.env.RemoteEnvPane$7.done(RemoteEnvPane.java:601)
        at javax.swing.SwingWorker$5.run(SwingWorker.java:737)
        at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
        at sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
        at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
        at javax.swing.Timer.fireActionPerformed(Timer.java:313)
        at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
        at java.awt.event.InvocationEvent.dispatch$$$capture(InvocationEvent.java:311)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
        at org.swingexplorer.edt_monitor.EDTDebugQueue.dispatchEvent(EDTDebugQueue.java:252)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
        at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
        at java.awt.Dialog.show(Dialog.java:1084)
        at java.awt.Component.show(Component.java:1671)
        at java.awt.Component.setVisible(Component.java:1623)
        at java.awt.Window.setVisible(Window.java:1014)
        at java.awt.Dialog.setVisible(Dialog.java:1005)
        at com.fr.env.RemoteEnvPane.tryConnectRemoteEnv(RemoteEnvPane.java:631)
        at com.fr.env.RemoteEnvPane.access$1100(RemoteEnvPane.java:69)
        at com.fr.env.RemoteEnvPane$4.actionPerformed(RemoteEnvPane.java:303)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
        at java.awt.Component.processMouseEvent(Component.java:6539)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6304)
        at java.awt.Container.processEvent(Container.java:2239)
        at java.awt.Component.dispatchEventImpl(Component.java:4889)
        at java.awt.Container.dispatchEventImpl(Container.java:2297)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
        at java.awt.Container.dispatchEventImpl(Container.java:2283)
        at java.awt.Window.dispatchEventImpl(Window.java:2746)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
        at java.awt.EventQueue$4.run(EventQueue.java:733)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
        at org.swingexplorer.edt_monitor.EDTDebugQueue.dispatchEvent(EDTDebugQueue.java:252)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
        at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
        at java.awt.Dialog.show(Dialog.java:1084)
        at java.awt.Component.show(Component.java:1671)
        at java.awt.Component.setVisible(Component.java:1623)
        at java.awt.Window.setVisible(Window.java:1014)
        at java.awt.Dialog.setVisible(Dialog.java:1005)
        at com.fr.design.EnvChangeEntrance.chooseEnv(EnvChangeEntrance.java:392)
        at com.fr.design.EnvChangeEntrance.chooseEnv(EnvChangeEntrance.java:360)
        at com.fr.design.actions.file.EditEnvAction.actionPerformed(EditEnvAction.java:20)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:842)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:886)
        at java.awt.Component.processMouseEvent(Component.java:6539)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6304)
        at java.awt.Container.processEvent(Container.java:2239)
        at java.awt.Component.dispatchEventImpl(Component.java:4889)
        at java.awt.Container.dispatchEventImpl(Container.java:2297)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
        at java.awt.Container.dispatchEventImpl(Container.java:2283)
        at java.awt.Window.dispatchEventImpl(Window.java:2746)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
        at java.awt.EventQueue$4.run(EventQueue.java:733)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
        at org.swingexplorer.edt_monitor.EDTDebugQueue.dispatchEvent(EDTDebugQueue.java:252)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    Caused by: java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy216.beat(Unknown Source)
        at com.fr.workspace.engine.client.FineWorkspaceTestClient.beatOnce(FineWorkspaceTestClient.java:27)
        at com.fr.workspace.engine.channel.WorkspaceChannelFactory.testForRpc(WorkspaceChannelFactory.java:65)
        at com.fr.workspace.engine.channel.WorkspaceChannelFactory.testConnection(WorkspaceChannelFactory.java:35)
        at com.fr.workspace.engine.client.FineWorkspaceConnector.testConnection(FineWorkspaceConnector.java:31)
        at com.fr.env.RemoteEnvPane$7.doInBackground(RemoteEnvPane.java:588)
        at com.fr.env.RemoteEnvPane$7.doInBackground(RemoteEnvPane.java:584)
        at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
        at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
        at java.util.concurrent.FutureTask.run(FutureTask.java)
        at javax.swing.SwingWorker.run(SwingWorker.java:334)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: java.util.zip.ZipException: Not in GZIP format
        at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91)
        at com.fr.serialization.GZipSerializerWrapper.deserialize(GZipSerializerWrapper.java:38)
        at com.fr.serialization.SerializerHelper.deserialize(SerializerHelper.java:39)
        at com.fr.workspace.engine.rpc.WorkspaceInvoker.invoke(WorkspaceInvoker.java:50)
        at com.fr.workspace.engine.rpc.WorkspaceProxyPool$1.invoke(WorkspaceProxyPool.java:74)
        ... 14 more

    注:字段 RemoteConnectionConfig.enableWhitelistVerify 值设置为 false 时不限制 IP 访问。

    附件列表


    主题: 数据决策系统
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    7*24h

    智 能客 服