В этом разделе рассматриваются следующие темы:
Безопасность
Источник данных может работать в одном из двух режимов доступа следующим образом:
В режиме ограниченного доступа, который используется по умолчанию, источник данных обслуживает только те запросы, которые исходят из того же домена, в котором расположен источник данных. Ограниченный режим предотвращает атаки с подделкой межсайтовых запросов (XSRF) и поэтому является более безопасным, чем режим неограниченного доступа. Поскольку библиотека источников данных предоставляет интерфейс только для возврата данных, а не для изменения состояния или данных на стороне сервера, возможны только XSRF-атаки, пытающиеся украсть данные. Чтобы защитить источник данных от попыток кражи данных, необходимо использовать ограниченный режим в сочетании с аутентификацией на основе файлов cookie. Способ аутентификации пользователей зависит от вашей среды и реализации.
В режиме неограниченного доступа источник данных обслуживает все запросы независимо от их происхождения. Источник данных, работающий в неограниченном режиме, может быть защищен аутентификацией на основе файлов cookie, но учтите, что источник данных будет уязвим для XSRF-атак. Используйте неограниченный режим, если визуализациям на веб-страницах за пределами домена источника данных требуется доступ к источнику данных или если данные находятся в общедоступном домене и поэтому не нуждаются в защите.
Запрос на визуализацию может указывать формат ответа JSON, CSV или HTML. Формат ответа определяет формат, в котором источник данных возвращает таблицу данных. Поскольку форматы CSV и HTML не уязвимы для XSRF-атак, к ним можно получить доступ из других доменов даже в ограниченном режиме.
Чтобы указать неограниченный режим, переопределите isRestrictedAccessMode()
следующим образом:
@Override protected boolean isRestrictedAccessMode() { return false; }
Для простоты все примеры, поставляемые с библиотекой, работают в режиме неограниченного доступа.
Ошибки и предупреждения
Когда невозможно или нежелательно возвращать действительную таблицу данных, библиотека выдает
DataSourceException
. Например, если пользователь не может быть аутентифицирован. Библиотека генерирует эти исключения, когда ошибки не позволяют ей создать таблицу данных. Вы можете создавать исключения в ситуациях, уникальных для вашего источника данных. Если это так, создайте собственные типы исключений ошибок, наследуя их от класса DataSourceException
. Вы также можете напрямую вызвать класс DataSourceException
.
Класс DataSourceException
находится в base
пакете, он принимает следующие параметры:
-
ReasonType
Этот параметр является обязательным. Доступные типы причин определяются в перечисленииReasonType
. Если ни один из доступных типов причин не подходит, вы можете использоватьOther
илиInternal
. -
MessageToUser
Этот параметр определяет текст сообщения об ошибке. В большинстве случаев она отображается пользователю в виде всплывающей подсказки, поэтому важно не включать техническую или конфиденциальную информацию.
Вы можете использовать набор вспомогательных функций в datasource.DataSourceHelper
для обработки ошибок. В этом случае вызовите две функции с одинаковым именем setErrorServletResponse
, чтобы получить DataSourceException
и установить ошибку в ответе сервлета данных. Одна из этих функций принимает запрос источника данных, другая принимает запрос HttpServlet request
и используется в тех случаях, когда не удается создать DataSourceRequest
. Пример реализации приведен в разделе «Определение возможностей и потока событий» .
Если невозможно вернуть таблицу данных, библиотека возвращает ошибку. Если возможно вернуть таблицу данных, но есть проблема с отчетом, библиотека возвращает предупреждение вместе с таблицей данных. Например, библиотека создает предупреждение в следующих ситуациях:
- если запрашивающая визуализация предоставляет
LIMIT
, что приводит к усеченным данным. - если запрашивающая визуализация запрашивает недопустимый шаблон форматирования в предложении
FORMAT
.
Чтобы добавить собственное предупреждение, создайте экземпляр base.Warning
и добавьте его в таблицу данных с помощью addWarning()
.
логирование
Библиотека использует ведение журналов Jakarta Commons. Ведение журнала Jakarta Commons можно использовать с большинством распространенных систем ведения журнала, которые у вас уже могут быть. Вам может понадобиться написать адаптер, если ваша система ведения журнала нестандартна. Дополнительные сведения см. на домашней странице журнала Jakarta commons .
Когда возникает исключение, информация отправляется в журнал. Способ доступа к журналу зависит от используемой системы ведения журнала.