以编程方式禁用BIRT Viewer的运行

时间:2013-07-10 14:28:59

标签: http jetty birt viewer

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

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

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

然而重新运行证明更加困难。我们有几个包装WebApp的Jetty Handler,我们首先想过尝试过滤包含重新运行命令的请求,但问题是它似乎与视图请求相同。

首次使用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查看器的日志中似乎没有任何内容可以解释为什么它被区别对待(即重新运行报告而不是仅仅渲染它)。

非常感谢任何帮助。

谢谢,

罗布

1 个答案:

答案 0 :(得分:0)

事实证明,POST请求包含SOAP内容,并带有<Operator>标记。

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

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

希望这有助于其他任何希望这样做的人。