2012-05-23 2 views
3

Я пишу веб-приложение Java, которое я хотел бы разрешить пользователям выполнять базовые отчеты в формате PDF. Обычно для этого я использовал Jasper Reports. Однако на этот раз я бы хотел, чтобы пользователи могли редактировать свои собственные отчеты в iReport и загружать их. Который должен быть достаточно прямым.Jasper Report Security Sandboxing

Это заставило меня думать, Jasper позволяет эффективно писать код в отчетах, которые запускаются при создании отчета. Можно ли написать отчет, который имеет полный доступ к API Java и, следовательно, к моему веб-приложению. Я не хочу, чтобы пользователи могли убить tomcat или, что еще хуже, использовать DAO api, который я создал для чтения данных других пользователей.

Кто-нибудь знает, действительно ли это возможно, и если это так, вы можете как-то его изолировать. Может быть, я мог бы фильтровать XML-отчеты до того, как они каким-то образом их выполнили?

Также известно ли, что то же самое относится к другим инструментам отчетности с открытым исходным кодом, таким как BIRT?

ответ

1

Посмотрите на Java-песочнице [1], которые мы используем в нашей BI решения ReportServer [2]. В настоящее время я готовлю блог-пост, в котором объясняется, как запускать jasperreports в изолированной среде.

Что касается Birt, то там же. Здесь пользователь не может напрямую писать Java-код, но они могут использовать Rhino, который в итоге имеет тот же эффект.

[1] http://blog.datenwerke.net/p/the-java-sandbox.html [2] http://reportserver.datenwerke.net

2

Я выпускаю веб-сервис [1], который позволяет разработчикам для создания PDF с использованием шаблонов, выписанные и-отчета,

Так что мне пришлось решать ту же проблему, моя первая попытка была использовать Java Security Engine API, но он был слишком сложным с множеством необходимых разрешений.

Так что, пока я искал, как Heroku изолирует каждое веб-приложение, я обнаружил Linux Containers (LXC) [2], поэтому я решил изолировать каждую «песочницу разработчика» в контейнере lxc.

Это не помешает пользователям отключить «изолированный сервер», но если они это сделают, они отключат только свою собственную песочницу, а песочница других пользователей не будет затронута.

[1] http://reports.simpleservic.es/landing [2] http://en.wikipedia.org/wiki/LXC

+1

не является идеальным решением, поскольку это потребует доступа DAO, чтобы быть удаленной и закреплены. Но я не вижу других альтернатив. – Gary

+0

В моем случае служба поддерживает XML как источник данных, а не источник данных SQL, поэтому доступ к базе данных не требуется. –