В этом разделе рассматриваются следующие темы:
Безопасность
Источник данных может работать в одном из двух режимов доступа следующим образом:
В режиме ограниченного доступа, который используется по умолчанию, источник данных обслуживает только те запросы, которые исходят из того же домена, что и тот, в котором находится источник данных. Ограниченный режим предотвращает атаки подделки межсайтовых запросов (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 .
При возникновении исключения информация отправляется в журнал. Способ доступа к журналу зависит от используемой вами системы журналирования.