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

本部分包含以下主题:

安全

数据源可以在以下两种访问模式下运行,如下所示:

  • 在受限访问模式(默认)下,数据源仅处理与数据源所在网域相同的请求。受限模式可以防止跨站请求伪造 (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 并在数据 WebView 响应中设置错误。其中一个函数接受数据源请求,另一个函数接受 HttpServlet request,用于 DataSourceRequest 创建失败的情况。定义功能和事件流中提供了一个实现示例。

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

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

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

日志记录

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

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