处理安全性、错误、警告和日志记录

本部分包含以下主题:

安全性

数据源可以按以下两种访问模式之一运行:

  • 在受限访问模式(默认设置)下,数据源仅处理那些与数据源所在的网域发出的请求。受限模式可以防止跨站请求伪造 (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 枚举中定义。如果没有合适的原因类型可用,您可以使用 OtherInternal
     
  • MessageToUser
    此参数用于定义错误消息的文本。 在大多数情况下,系统会以提示的形式显示给用户,因此请务必不要包含技术或机密信息。

您可以使用 datasource.DataSourceHelper 中的一组辅助函数来处理错误。在本例中,调用两个名称均为 setErrorServletResponse 的函数,以接受 DataSourceException 并对数据 servlet 响应设置错误。其中一个函数接受数据源请求,另一个函数接受 HttpServlet request,并且在创建 DataSourceRequest 失败时使用。定义功能和事件流中提供了实现示例。

如果无法返回数据表,则库会返回错误。如果可以返回数据表,但要报告问题,则该库将返回警告以及该数据表。例如,该库会在以下情况下创建警告:

  • 如果查询可视化图表提供的 LIMIT 会导致数据被截断,
  • 如果查询可视化在 FORMAT 子句中请求无效的格式模式。

如需添加您自己的警告,请使用 addWarning() 方法创建一个 base.Warning 实例,并将其添加到您的数据表中。

日志记录

该库使用 Jakarta Commons 日志记录功能。Jakarta Commons 日志记录功能可与您可能已经拥有的大多数常见日志记录系统搭配使用。如果您的日志记录系统是非标准系统,可能需要编写适配器。 如需了解详情,请参阅 Jakarta Commons 日志记录首页

抛出异常时,系统会将信息发送到日志。访问日志的方式取决于您使用的日志记录系统。