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