Управление безопасностью, ошибками, предупреждениями и ведением журнала

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

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

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

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

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