1

我们正在应用程序的嵌入式 Jetty 服务器中启动 BIRT 3.7.2 Viewer Webapp,出于法律原因,我们不允许自己编辑 war 文件

我们希望禁用查看器中的一些选项,例如服务器端打印和重新运行报告的能力。

打印很简单,只需使用覆盖描述符覆盖 web.xml 并设置禁用它的 BIRT 属性。

然而,重新运行被证明更加困难。我们有几个包装 WebApp 的 Jetty 处理程序,我们首先考虑尝试过滤包含重新运行命令的请求,但问题是它似乎与查看请求相同。

首次使用 BIRT 查看器呈现报告时,Jetty 网络服务器中会记录三个必要的请求: /birt/frameset?__document=hello_world.rptdocument- GET 请求 /birt/webcontent/birt/pages/common/processing.jsp?__rtl=false- GET 请求 /birt/frameset?__document=hello_world.rptdocument&__sessionId=20130710_161752_347- POST 请求

重新运行时: /birt/frameset?__document=hello_world.rptdocument&__sessionId=20130710_161752_347- POST 请求

这使得过滤 URL 变得困难,因为请求对象看起来相同,并且在 Jetty 或 BIRT 查看器的日志中似乎没有任何内容可以解释为什么对它进行不同的处理(即重新运行报告而不是仅仅呈现它)。

任何帮助将不胜感激。

谢谢,

4

1 回答 1

0

所以事实证明,POST 请求包含带有<Operator>标签的 SOAP 内容。

对于报告的初始查看,此标记的值为GetPage,而对于重新运行请求,则为ChangeParameter,因此我可以在此过滤服务器端。

然而,这显然涉及HttpServletRequest使用 读取正文getInputStream(),因此我必须使用此处概述的方法将以下处理程序的请求包装在链中:http: //www.coderanch.com/t/445053/Web-Services/java/提取 SOAP 对象 HttpServletRequest

希望这可以帮助其他希望做同样事情的人。

于 2013-07-11T16:26:59.600 回答