我们正在使用 iReport 5 和 JasperReports Server 5 。 W有一个基于 MySQL存储过程的报告,它在Designer中运行良好,但是从服务器上运行了6632错误。
存储过程接受3个参数,我已将参数设置为服务器上的输入控件。当我们从服务器运行报告时,我们收到以下错误:
2013-04-16 22:20:00,968 ERROR Validator,pool-1-thread-9:493 - Invalid SQL:An error has occurred.
Please contact your system administrator. (6632), SQL: call sp_fasb(?, ?, ?)
2013-04-16 22:20:00,968 ERROR AsyncJasperPrintAccessor,pool-1-thread-9:258 - Error during report execution
com.jaspersoft.jasperserver.api.JSSecurityException: An error has occurred. Please contact your system administrator. (6632)
at com.jaspersoft.jasperserver.api.security.validators.Validator.validateSQL(Validator.java:494)
at com.jaspersoft.jasperserver.api.engine.jasperreports.util.JRTimezoneJdbcQueryExecuter.createDatasource(JRTimezoneJdbcQueryExecuter.java:167)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1086)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:667)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$SynchronousExecutor.execute(EngineServiceImpl.java:859)
at net.sf.jasperreports.engine.fill.BaseFillHandle.startFill(BaseFillHandle.java:165)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$AsynchronousReportFiller.fillReport(EngineServiceImpl.java:821)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.fillReport(EngineServiceImpl.java:1622)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportFill.runReport(EngineServiceImpl.java:1005)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportRunnable.run(EngineServiceImpl.java:881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
在以前的版本中,这被报告为需要SQL Validation属性的正则表达式,或者需要延长基础查询中字符数的大小,我们尝试过这两种情况都没有成功。
答案 0 :(得分:1)
此错误与4.5
中的SQL Injection secuirty相关修复有关请检查您运行的报告是否包含在查询开始时有注释的SQL查询。从4.5开始,将不允许此类查询,因为它们会造成SQL注入安全风险。
请你从“jasperserver.log”中添加确切的错误日志,以获得确切的错误消息。然后,我们将通过配置secuirty相关属性文件
作为简单的解决方法,您还可以转到/jasperserver-pro/WEB-INF/classes/esapi/security-config.properties文件,然后禁用SQL注入的secuirty: -
security.validation.sql.on=true
到
security.validation.sql.on=false
答案 1 :(得分:1)
使用Jaspersoft Studio 6.1.1并尝试获取与Jasper Server 5.5.0兼容的报告,我发现我所要做的就是添加language =“SQL”作为queryString的属性,然后停止6632错误。我不确定为什么会丢失,但这是我的情况。
<queryString language="SQL">
<![CDATA[call sp_fasb(?, ?, ?)]]>
</queryString>