如何获取JasperServer中不同用户使用的报表名称
获取Jasper Server Enterprise 7.0中当前登录用户的报表名称
针对你遇到的问题,我整理了几个在Jasper Server 7.0里获取当前登录用户正在使用的报表名称的可行方案,你可以根据自己的使用场景选择:
1. 在报表内部直接使用内置参数
Jasper Server提供了几个内置参数,可以直接在报表设计中获取报表相关信息:
$P{REPORT_UNIT_URI}:返回报表单元的完整URI(比如/public/Department/Sales_Report),你可以通过字符串函数提取报表名称,示例表达式:
如果报表在多级目录下,想要准确获取最后一级的报表名称,可以嵌套使用SUBSTRING_AFTER($P{REPORT_UNIT_URI}, "/")SUBSTRING_AFTER或者用正则表达式:REGEX_REPLACE($P{REPORT_UNIT_URI}, ".*/(.*)", "$1")$P{JASPER_REPORT}.getName():通过JasperReport对象直接获取报表的名称,这个方法返回的是报表设计文件的名称(不带.jrxml后缀),示例表达式:
注意:这个参数在报表运行时才会生效,设计时可能无法预览值。$P{JASPER_REPORT}.getName()
2. 通过REST API查询当前用户的报表执行实例
如果是在外部应用或者后台逻辑中需要获取用户正在使用的报表,可以调用Jasper Server的REST API:
- 使用
/rest_v2/reportExecutions接口,该接口会返回当前用户所有活跃的报表执行实例,其中包含报表单元的URI和名称。示例curl命令(替换成你的服务器地址和用户凭证):
返回的JSON响应中,curl -u your_username:your_password http://jasper-server-host:8080/jasperserver/rest_v2/reportExecutionsreportUnitUri字段就是报表的完整路径,你可以从中解析出报表名称;部分版本中还会直接返回reportUnitName字段。
3. 自定义事件监听器实现实时监控
如果需要长期监控用户的报表访问行为,可以通过自定义Spring事件监听器来实现:
- 编写一个实现
ApplicationListener<ReportExecutionEvent>的Java类,在onApplicationEvent方法中获取报表和用户信息:import com.jaspersoft.jasperserver.api.engine.common.service.impl.ReportExecutionEvent; import org.springframework.context.ApplicationListener; public class ReportAccessListener implements ApplicationListener<ReportExecutionEvent> { @Override public void onApplicationEvent(ReportExecutionEvent event) { String username = event.getUsername(); String reportName = event.getReportUnit().getName(); // 这里可以将username和reportName存储到数据库或日志中 System.out.println("User " + username + " accessed report: " + reportName); } } - 将这个类注册到Jasper Server的Spring上下文(比如修改
applicationContext.xml),添加bean定义:
这样每当用户执行报表时,监听器就会触发,记录下用户和对应的报表名称。<bean id="reportAccessListener" class="com.yourpackage.ReportAccessListener"/>
内容的提问来源于stack exchange,提问作者MegJ
相关产品推荐
相关产品推荐

