Программное отключение запуска из BIRT Viewer

Мы запускаем веб-приложение BIRT 3.7.2 Viewer на встроенном сервере Jetty в нашем приложении, и по юридическим причинам нам не разрешено редактировать файл war самостоятельно.

Мы хотим отключить некоторые параметры в средстве просмотра, такие как печать на стороне сервера и возможность повторного запуска отчета.

Печать была достаточно простой, достаточно просто использовать дескриптор переопределения, чтобы переопределить web.xml и установить свойство BIRT, которое его отключает.

Однако повторный запуск оказывается сложнее. У нас есть несколько обработчиков Jetty, обертывающих WebApp, и мы сначала подумали попытаться отфильтровать запрос, содержащий команду повторного запуска, но проблема в том, что он кажется идентичным запросу просмотра.

При первой визуализации отчета с помощью средства просмотра 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 нет ничего, что объясняло бы, почему он обрабатывается по-разному (например, повторный запуск отчета, а не просто его рендеринг).

Любая помощь будет принята с благодарностью.

Спасибо,

Роб


person m0rv4i    schedule 10.07.2013    source источник


Ответы (1)


Получается, что запросы POST содержали SOAP-контент с тегом <Operator>.

Для первоначального просмотра отчета значение этого тега было GetPage, тогда как при повторном запуске запрос был ChangeParameter, поэтому я мог фильтровать по нему на стороне сервера.

Однако это, очевидно, связано с чтением тела HttpServletRequest с помощью getInputStream(), поэтому мне пришлось обернуть запрос для следующих обработчиков в цепочке, используя метод, описанный здесь: http://www.coderanch.com/t/445053/Web-Services/java/Extract-SOAP-object-HttpServletRequest

Надеюсь, это поможет всем, кто желает сделать то же самое.

person m0rv4i    schedule 11.07.2013