如何阻止BIRT报表设计器将外部连接配置信息写入报表文件?
如何阻止BIRT报表设计器将外部配置的数据库连接信息写入报表文件?
我希望通过外部配置文件config.xml指定数据库连接信息,避免敏感配置被写入报表的.rptdesign文件中。
我的外部配置文件config.xml内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <DataTools.ServerProfiles version="1.0"> <profile autoconnect="No" desc="" id="d04355a1-7c01-11ef-878c-9abc7ec407b6" name="claim2me_db_profile" providerID="org.eclipse.birt.report.data.oda.jdbc"> <baseproperties> <property name="odaUser" value="user"/> <property name="metadataBidiFormatStr" value="ILYNN"/> <property name="odaDriverClass" value="org.postgresql.Driver"/> <property name="odaJndiName" value=""/> <property name="odaPassword" value="pass"/> <property name="disabledMetadataBidiFormatStr" value=""/> <property name="contentBidiFormatStr" value="ILYNN"/> <property name="odaURL" value="jdbc:postgresql://localhost:5432/my-postgres-database"/> <property name="disabledContentBidiFormatStr" value=""/> </baseproperties> </profile> </DataTools.ServerProfiles>
已将报表数据源指向该配置文件,但BIRT设计器仍会在report.rptdesign中保存部分连接属性:
<property name="odaDriverClass">org.postgresql.Driver</property> <property name="odaURL">jdbc:postgresql://localhost:5432/my-postgres-database</property> <property name="odaUser">use</property>
目前未找到完整的独立存放连接信息的有效方法,需解决如何阻止设计器将配置写入报表文件的问题。
解决步骤
1. 配置共享数据源时禁用属性保存
通过BIRT设计器的共享数据源绑定外部配置,同时禁用报表内的属性存储:
- 打开
Data Explorer面板,右键点击Data Sources→New Data Source - 选择
JDBC Data Source,点击Next后勾选Use existing data source profile,选中你的claim2me_db_profile - 进入
Advanced选项卡,确保Save connection properties in report处于未勾选状态,若有Do not save connection profile password with the report选项也建议勾选
2. 修改设计器全局偏好强制隔离配置
- 打开
Window→Preferences,导航到Data Management→Connection Profiles - 在
Profile Storage区域选择Store profiles in external file,指定你的config.xml路径 - 勾选Prevent saving connection properties in report files(部分版本名称可能略有差异),强制设计器不将配置写入报表文件
3. 手动清理报表文件中的残留属性
如果报表已写入连接属性,需手动删除report.rptdesign中对应的<property>节点,保存后重新绑定外部数据源,确保后续编辑不会再次写入。
4. 运行时脚本动态加载配置(可选)
若需要完全隔离,可在报表运行时通过脚本加载外部配置,设计器中无需保存任何敏感属性:
在报表数据源的beforeOpen事件中添加以下脚本:
// 加载外部配置文件 var configFile = new Packages.java.io.File("path/to/config.xml"); var doc = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(configFile); var xpath = Packages.javax.xml.xpath.XPathFactory.newInstance().newXPath(); // 提取连接属性 var url = xpath.evaluate("//property[@name='odaURL']/@value", doc); var user = xpath.evaluate("//property[@name='odaUser']/@value", doc); var driver = xpath.evaluate("//property[@name='odaDriverClass']/@value", doc); // 绑定到数据源 this.setProperty("odaURL", url); this.setProperty("odaUser", user); this.setProperty("odaDriverClass", driver);
内容的提问来源于stack exchange,提问作者Alex Cristian R
相关产品推荐
相关产品推荐

