我们使用jasper和java 1.7生成报告。它适用于Java 1.7版本。在Java版本更新到Java1.8之后获取以下指定的异常。
问题
No secret found for "XXXXXX" key in "net.sf.jasperreports.data.adapter" category.
此处“XXXXXX”是我的数据库密码。
我的数据库配置是:
<?xml version="1.0" encoding="UTF-8" ?>
<jdbcDataAdapter class="net.sf.jasperreports.data.jdbc.JdbcDataAdapterImpl">
<name>DataAdapter</name>
<driver>org.postgresql.Driver</driver>
<username>XXXX_user</username>
<password>XXXXX</password>
<savePassword>true</savePassword>
<url>jdbc:postgresql://XXXXXXX:5432/XXXXXdb</url>
<database></database>
<serverAddress></serverAddress>
</jdbcDataAdapter>
无法找出问题的解决方案。任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:0)
您的问题不应与Java版本相关。它与JasperReports配置有关,用于处理数据适配器文件中的密码。
以纯文本格式存储在数据适配器文件中的密码可能会引起安全问题。
这就是为什么JasperReports依赖于net.sf.jasperreports.util.SecretsProvider
实现来解析密码的原因。需要通过扩展机制插入此SecretsProvider
。默认情况下没有插入任何提供程序。
对于生产用途,需要在您身边实施并注册解密密码的正确SecretsProvider
。
出于基本测试目的,您可以通过将以下配置添加到类路径根目录中的jasperreports_extension.properties
来注册内置扩展net.sf.jasperreports.util. IdentitySecretsProviderExtensionsRegistryFactory
:
net.sf.jasperreports.extension.registry.factory.identity.secrets.provider=net.sf.jasperreports.util.IdentitySecretsProviderExtensionsRegistryFactory
net.sf.jasperreports.extension.identity.secrets.category.da=net.sf.jasperreports.data.adapter