Обработка безопасности, ошибок, предупреждений и журналирования

В этом разделе рассматриваются следующие темы:

Безопасность

Источник данных может работать в одном из двух режимов доступа следующим образом:

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

При возникновении исключения информация отправляется в журнал. Способ доступа к журналу зависит от используемой вами системы журналирования.